不了解ifelse声明

时间:2016-12-09 19:40:40

标签: r if-statement recode

我试图根据另外两个变量重新编码变量,我认为我误解了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]

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