我试图根据另外两个变量重新编码变量,我认为我误解了ifelse
语句的工作原理。
我有一个字符串,然后是一个整数。我希望新列与字符串c1
相同,除非整数列flag
等于1,在这种情况下它将等于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]
答案 0 :(得分: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