2014-09-07 2 views
0

단순 논리 대체 문제; VAR2가 NA 경우를 제외하고다른 열의 is.na에서 조건부 행 값 대체

mydf <- expand.grid(var1 = c('type1', 'type2'), var2 = c(7, 6, "NA"), var3 = 9) 

내가 VAR2의 값으로 VAR3의 값을 대체하고 싶습니다 : 나는 같은 dataframe가 있습니다. 따라서 결과 var3은 7,7,6,6, NA, NA가되어야합니다. 이것려고, 나는이

mydf$var3[mydf$var2 == 7] <- 5 

가 제대로 교체를 필요로 행 1 mydf의 2를 식별하고, 혼자 마지막 네 행을 잎 통지, 그래서 VAR3 = 5,5,9,9를 얻을, 9,9. 그러나 시도해 보면

mydf$var3[!is.na(mydf$var2)] <- 5 

나는 var3 = 5,5,5,5,5,5를 얻습니다. 왜 var2가 NA가 아닌 마지막 두 행을 건너 뛰지 않았습니까? 다음 문제는 대체 값을 상수 대신 var2로 가져 오는 방법을 모르는 것입니다. 시도 할 때

mydf$var3[!is.na(mydf$var2)] <- mydf$var2 

나는 var3 = 1,1,2,2,3,3을 얻습니다. 나는 전혀 이해하지 못한다.

+3

당신의''NA ''는''var2'를 인자로 만들고 있습니다.''mydf $ var3 [! is.na (mydf $ var2)] <- mydf $ var2가 필요합니다. na (mydf $ var2)]'같은 길이로 벡터를 교체해야합니다. – user20650

+0

"new var3은 7,7,6,6, NA, NA"*이어야합니다. 7,7,6,6,9,9를 의미합니까? – user20650

+0

예, 저의 실수는 7,7,6,6,9,9 여야합니다. 위의 솔루션은 훌륭하게 작동합니다. 1,1,2,2,3,3은 어디에서 왔습니까? – marcel

답변

0

설명 에서처럼 문자열 "NA"NA 값이 아닙니다. 따라서 is.na("NA")FALSE이고 모든 행이 선택됩니다. 정의에서 "NA"NA으로 바꿉니다. 아무것도 NA 없었기 때문에이 오류가 없었 전에 - 그들이 지금 불평등 길이를 가지고 있기 때문에 당신이 방금 mydf$var2과 왼쪽을 대체 할 수

mydf <- expand.grid(var1 = c('type1', 'type2'), var2 = c(7, 6, NA), var3 = 9) 
mydf$var3[!is.na(mydf$var2)] <- mydf$var2[!is.na(mydf$var2)] 

참고.

+0

설명을 해주셔서 감사합니다. – marcel