使用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不可能做到这一点?
2 回答
我认为这应该有效 . 我们可以检查
df
中的值是否等于7.之后,使用rowSums
查看是否有任何大于0的行,这意味着至少有一个值为7 .或者我们可以使用申请
基本R等价物是这样的 .
你可以试试
purrr::map_dbl
产量
在
dplyr::mutate
声明中,这将是