示例数据框:
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))
这是一个很好的解决方案还是有更好/更快的方式?
答案 0 :(得分:1)
我认为这是一个很好的解决方案
您也可以使用dplyr&#39; s if_else
。
dplyr中也有case_when
,但这似乎有些过分。
另外
df %>% mutate(x = y * (A == "group") + x * (A != "group")
但我不会在这里使用这种方法。
case_when
和if_else
是dplyr函数,因此如果您考虑将此代码与数据库后端一起使用,那么它们可能比非dplyr函数更有效。
更新:我一直在考虑replace
,但在这种情况下它不能很好地工作。你必须写:
df %>% mutate(x = replace(x, group == "A", y[group =="A"]))
这看起来很难看。