2013-08-01 4 views
0

나는 비슷한이와 sapply 기능,하지만 내가 (다른 변수 사이에) 두 변수의 RSHIFTSTART와 RSHIFTEND와 데이터 집합을 R apply function with multiple parametersR - 여러 인수

에 아주 같은 질문입니다. 이 변수에는 시간 등이 포함됩니다. 23:30:00 또는 00:00:00. 두 변수가 모두 0 인 경우 RSHIFTSTART와 RSHIFTEND를 NA로 바꾸고 싶습니다. '00 : 00 : 00 '. 내가 일을 할 수 있습니다 생각하는 함수를 작성했습니다

:

# Change '00:00:00' to NA where both variables are '00:00:00' 
zeroTime=function(x,y) { 
    if (x=='00:00:00' & y=='00:00:00') { 
     replace(x,x=='00:00:00',NA) 
     replace(y,x=='00:00:00',NA) 
    } 
} 

내 질문은 데이터 세트의 변수, 즉를 업데이트하려면이 기능을 적용하는 방법입니다. 그것에 두 개의 인수를 제공합니다. 나는 시도 :

sapply(rosterSample$RSHIFTSTART,rosterSample$RSHIFTEND,zeroTime) 

하지만,이 구문이 올바르지 않습니다. 아마도 나는 호출마다 하나의 변수 만 변경하는 것으로 제한 될 것입니다. RSHIFTSTART 또는 RSHIFTEND, 괜찮습니다.

아이디어가 있으십니까? 덕분에이 같은 피트

+1

방법에 대한'mapply' : – shadow

+0

'sapply' 또는'mapply' 여기에 올바른 접근 아니다 "mapply 다변량 sapply의 버전입니다." R은 * pass-by-value *가 아닌 * pass-by-value *를 사용합니다. 즉'zeroTime'는 함수의 범위 밖에서'x'와'y' 인자를 수정하지 않습니다. @ Karl의 대답은 올바른 접근 방식입니다. – flodel

+0

함수가 값으로 전달되고 업데이트 된 변수를 반환해야하는 경우 감사합니다. flodel입니다. 토마스도 그 점에 대해 고마움을 느낀다. 나는 내 검색에서 그 질문을 보지 못했다. – Pete855217

답변

4

뭔가?

rosterSample <- data.frame(RSHIFTSTART=c('00:00:00', '01:00:00', '00:00:00'), RSHIFTEND=c('10:00:00', '00:00:00', '00:00:00'), stringsAsFactors=FALSE) 
ind <- with(rosterSample, RSHIFTSTART=='00:00:00' & RSHIFTEND=='00:00:00') 
rosterSample$RSHIFTSTART[ind] <- NA 
rosterSample$RSHIFTEND[ind] <- NA 
+0

감사합니다 칼 - 그 트릭을해야합니다. 샘플 코드를 보내 주셔서 감사합니다. – Pete855217