使用 dplyr,我尝试使用 ifelse 和 mutate 有条件地更新列中的值。我想说的是,在一个数据框中,如果一行中的任何变量(列)等于7,那么变量c应该变成100,否则c保持不变。
df <- data.frame(a = c(1,2,3),
b = c(1,7,3),
c = c(5,2,9))
df <- df %>% mutate(c = ifelse(any(vars(everything()) == 7), 100, c))
这给了我错误:
Error in mutate_impl(.data, dots) :
Evaluation error: (list) object cannot be coerced to type 'double'.
我想要的输出是:
a b c
1 1 1 5
2 2 7 100
3 3 3 9
注意:这是具有更多行和列的较大数据集的抽象示例。
编辑:
这段代码让我更接近一点,但它并没有对每一行应用 ifelse 语句。相反,如果 7 出现在数据框中的任何位置,则它将 c 列中的所有值更改为 100。
df <- df %>% mutate(c = ifelse(any(select(., everything()) == 7), 100, c))
a b c
1 1 1 100
2 2 7 100
3 3 3 100
也许使用 dplyr 无法做到这一点?