使用 if 提取值并将它们放入新列中

Extracting values with if and put them in a new column

也许这是一个非常简单的问题,但我无法弄清楚我的短代码有什么问题。

这是我的(非常简单的)数据框:

structure(list(sample = structure(c(1L, 2L, 1L, 1L, 1L, 2L, 3L, 
3L, 3L), .Label = c("a", "b", "c"), class = "factor"), value = c(0.1446689595, 
0.9151456018, 0.880888083, 0.005522657, 0.7079621046, 0.4770259836, 
0.6960717649, 0.5892328324, 0.1134234308), new = c("red", "red", 
"red", "red", "red", "red", "red", "red", "red")), .Names = c("sample", 
"value", "new"), row.names = c(NA, -9L), class = "data.frame")

我想做的是添加一个新列,其中新值取决于第一列的值。换句话说更简单的话:

if (df1$sample != "a") {
    df1$new <- "green"
} else {
    df1$new <- "red"
}

但是 R returns 一个错误:

In if (df1$sample != "a") { :
  the condition has length > 1 and only the first element will be used

我还尝试了 elseif 语句:

ifelse(df1$sample != "a", df1$new <- "green", df1$new <- "red")

但在这种情况下,new 列仅包含 "red" 而没有 "green"。

我是不是漏掉了什么?

谢谢!

ifelse 应该可以正常工作 - 你只需要分配它

df1$new1 <- ifelse(df1$sample != "a", df1$new1 <- "green", df1$new1 <- "red")




  sample       value new  new1
1      a 0.144668959 red   red
2      b 0.915145602 red green
3      a 0.880888083 red   red
4      a 0.005522657 red   red
5      a 0.707962105 red   red
6      b 0.477025984 red green
7      c 0.696071765 red green
8      c 0.589232832 red green
9      c 0.113423431 red green

我会避免使用 new 作为变量名 - 它是一个函数的名称,这可能会导致问题。

你可以试试

 df1$new <-  c('green', 'red')[(df1$sample=='a')+1L]
 df1
 #  sample       value   new
 #1      a 0.144668959   red
 #2      b 0.915145602 green
 #3      a 0.880888083   red
 #4      a 0.005522657   red
 #5      a 0.707962105   red
 #6      b 0.477025984 green
 #7      c 0.696071765 green
 #8      c 0.589232832 green
 #9      c 0.113423431 green