0

我正在尝试根据其他两个变量重新编码一个变量,我认为我误解了该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]
4

1 回答 1

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
于 2016-12-09T20:54:04.477 回答