2016-12-09 1 views
0

다른 두 변수를 기반으로 변수를 다시 코딩하려고하고 있는데 ifelse 문이 어떻게 작동하는지 오해하고 있습니다.ifelse 문을 이해하지 못함

하나의 열이 문자열이고 다른 하나가 정수입니다. 정수 열 flag이 1과 같지 않으면 새로운 열을 c1 문자열과 동일하게 지정하십시오.이 경우 XX과 같습니다.

c1  flag EXPECTED OUTPUT 
    SS   0   SS 
    SS   1   XX 
    MM   0   MM 
    LL   0   LL 
    LL   0   LL 
    SS   1   XX 
    LL   0   LL  
    LL   1   XX 
    SS   0   SS 

나는 같은 ifelse을 사용하고 있습니다 :

df$expectedoutput <- ifelse(df$flag==1, "XX", df$c1) 

나는 이것이 레코딩을 할 수있는 가장 좋은 방법입니다 있는지 확실하지 않습니다. 나는이 오류가 새 열보기 물어 보면

는 :

Error in View : 'names' attribute [1849] must be the same length as the vector [1] 
+5

정확히 현재 출력에 문제가 있습니까? – Joe

+0

요인 변수가 있고 문자열이 아닐 수도 있습니다. – lmo

+0

'df $ string <- as.character (df $ string)'을 붙이면 같은 문제가 발생합니다. –

답변

1

을 당신이 stringsAsFactors=TRUE에 물린되었다 생각합니다. 이것은 예상 출력을주는 것 같습니다 :

df <- read.table(text=" 
c1  flag 
SS   0 
SS   1 
MM   0 
LL   0 
LL   0 
SS   1 
LL   0  
LL   1 
SS   0", header=TRUE, stringsAsFactors=FALSE) 

df$expected <- ifelse(df$flag == 1, "XX", df$c1) 

> df 
    c1 flag expected 
1 SS 0  SS 
2 SS 1  XX 
3 MM 0  MM 
4 LL 0  LL 
5 LL 0  LL 
6 SS 1  XX 
7 LL 0  LL 
8 LL 1  XX 
9 SS 0  SS 
관련 문제