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

kon*_*vas 2 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
Run Code Online (Sandbox Code Playgroud)

我想要实现的是结果

d[c("var1", "var2", "var3")] <- d[c("var1", "var2", "var3")] * d$m
Run Code Online (Sandbox Code Playgroud)

mutate()在一次通话中使用(即没有写d %>% mutate(var1 = var1 * m) %>% mutate(var2 = var2 * m)等).可能吗?

我试过mutate(var1:var3 = ...)(这种语法有效select()),但它不起作用.能够在一次调用中编写它是非常方便的,所以我可以将它插入到操作链中,而不是必须超出它们并按上述方式执行.在我的情况下,我有超过3列需要转换,所以写出来不是一个选项.使用gather()然后spread()来自的替代方案tidyr是可能的,但不是非常优雅且耗时.

luk*_*keA 6

试试这个:

d %>% mutate_each(funs(. * m), var1:var3)
Run Code Online (Sandbox Code Playgroud)