2013-12-11 5 views
1

모든 누락 값에 대해 시퀀싱 번호로 채우기를 원하는 값이 누락 된 날짜 필드 (문자열로 변환 된 요소 클래스)가 있습니다. 여기에 지금까지 내 코드 ...날짜/요인 벡터 필드에 sapply 사용 - 증가 값 포함

f<- function(x, counter){ 
    if(x == ""){ 
     counter = counter + 1; return (toString(counter)) 
    } else{ 
     return (toString(x)) 
    } 
} 
sapply(x$DateTime_, f, -9999) 

카운터는 증가하지 않습니다이며, 같은 벡터 반환 주시면 감사하겠습니다 증가하는 카운터를 얻을 수

[1] "-9998" "-9998" "-9998" "-9998" "-9998" "1/1/1998" 

어떤 도움을.

+0

: http://cran.r-project.org/doc/contrib/Fox-Companion/appendix 그것은 논리적 인덱스의 장점과 본질적으로 벡터화 비교 및 ​​교체 연산자를한다 -scope.pdf. 당신은 아무것도 늘리지 않고 있습니다. – Thomas

답변

1

이 함수는 f를 호출 할 때마다 -9999를 전달한 다음 1 씩 증가시킵니다. 따라서 매번 -9998이 반환됩니다.

부모 환경에서 카운터 변수를 유지하고 < < - 연산자로 업데이트하려고합니다. 이와 같은 것이 당신의 예를 위해 속임수를 쓸 것입니다.

f = function(x) { 
    if (x == "") { 
    counter <<- counter + 1 
    return(toString(counter)) 
    } else { 
    return(toString(x)) 
    } 
} 
counter <- -9999 
sapply(c("", "", "", "", "", "1/1/1998"), f) 
+0

당신은 마법사입니다. "<-"와 "<< -"의 차이를 설명하는 자료를 가르쳐 주시겠습니까? – JMT2080AD

+0

물론 - 합리적인 소개는 http://cran.r-project.org/doc/manuals/R-intro.html#Scope입니다. 위의 토마스의 의견도 유용 할 것이다. – josliber

2

같은 목표를 달성하는 또 다른 방법이 있습니다. R에서 변수 범위에 최대 읽기

dates <- c("", "", "", "", "", "1/1/1998", "") 
blanks <- dates == "" 

dates[blanks] <- seq(from=-9999, by=1, length.out=sum(blanks)) 

dates 
# [1] "-9999" "-9998" "-9997" "-9996" "-9995" "1/1/1998" "-9994"