gpt4 book ai didi

r - 如果一行中的任何列满足条件而不是 mutate() 列

转载 作者:行者123 更新时间:2023-12-02 00:41:41 25 4
gpt4 key购买 nike

使用 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 无法做到这一点?

最佳答案

我认为这应该可行。我们可以检查 df 中的值是否等于 7。之后,使用 rowSums 查看是否有任何行大于 0,这意味着至少有一个值是 7。

df <- df %>% mutate(c = ifelse(rowSums(df == 7) > 0, 100, c))

或者我们可以使用apply

df <- df %>% mutate(c = ifelse(apply(df == 7, 1, any), 100, c))

基本的 R 等价物是这样的。

df$c[apply(df == 7, 1, any)] <- 100

关于r - 如果一行中的任何列满足条件而不是 mutate() 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46285484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com