仅在满足特定条件时更改列,否则不要修改它

时间:2017-12-06 15:32:01

标签: r if-statement dataframe mutate

示例数据框:

set.seed(1)
df <- data.frame(x = runif(10), 
                 y = runif(10),
                 group = factor(sample(LETTERS[1:10], 10, replace = TRUE)))

如果x,我想将y设置为group == "A",否则我不想修改它。现在我找到了这个解决方案:

df %<>% mutate(x =  ifelse(group == "A", y, x))

这是一个很好的解决方案还是有更好/更快的方式?

1 个答案:

答案 0 :(得分:1)

我认为这是一个很好的解决方案

您也可以使用dplyr&#39; s if_else

dplyr中也有case_when,但这似乎有些过分。

另外

df %>% mutate(x = y * (A == "group") + x * (A != "group")

但我不会在这里使用这种方法。

case_whenif_else是dplyr函数,因此如果您考虑将此代码与数据库后端一起使用,那么它们可能比非dplyr函数更有效。

更新:我一直在考虑replace,但在这种情况下它不能很好地工作。你必须写:

df %>% mutate(x = replace(x, group == "A", y[group =="A"]))

这看起来很难看。