2016-12-09 11 views
0

他の2つの変数に基づいて変数を再コードしようとしていますが、ifelseステートメントの仕組みを誤解していると思います。ifelseステートメントを理解していません

私は文字列である1つの列を持ち、次に他は整数です。整数列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 
関連する問題