假设我有一个像这样的数据框
d <- data.frame(id = 1:5, var1 = rep(1, 5), var2 = rep(2, 5),
var3 = rep(3, 5), m = seq(0, 1, length.out = 5))
d
# id var1 var2 var3 m
# 1 1 2 3 0.00
# 2 1 2 3 0.25
# 3 1 2 3 0.50
# 4 1 2 3 0.75
# 5 1 2 3 1.00
我想要实现的是
的结果d[c("var1", "var2", "var3")] <- d[c("var1", "var2", "var3")] * d$m
但在一次通话中使用mutate()
代替(即不写d %>% mutate(var1 = var1 * m) %>% mutate(var2 = var2 * m)
等)。有可能吗?
我尝试了mutate(var1:var3 = ...)
(此语法适用于select()
),但它不起作用。能够在一次调用中编写它是非常方便的,所以我可以将它插入到操作链中,而不是必须超出它们并按上述方式执行。在我的情况下,我有超过3列需要转换,所以写出来不是一个选项。使用来自gather()
的{{1}}然后spread()
的替代方案是可行的,但不是非常优雅且耗时。
答案 0 :(得分:6)
试试这个:
d %>% mutate_each(funs(. * m), var1:var3)