一次在许多列上使用mutate,而不是明确地写出来

时间:2014-08-14 13:09:17

标签: r dplyr

假设我有一个像这样的数据框

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()的替代方案是可行的,但不是非常优雅且耗时。

1 个答案:

答案 0 :(得分:6)

试试这个:

d %>% mutate_each(funs(. * m), var1:var3)