假设我有这样的数据框
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
是可能的,但不是非常优雅且耗时.