R 在多个列上同时使用mutate,而不显式地写出它们
假设我有一个这样的数据帧R 在多个列上同时使用mutate,而不显式地写出它们,r,dplyr,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
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%突变(var2=var2*m)
etc)。可能吗
我尝试了mutate(var1:var3=…)
(此语法在select()
中有效),但不起作用。如果能够在一个调用中编写它,那将非常方便,因此我可以将它插入到操作链中,而不必走到操作链之外,按照上面所述的方式进行操作。在我的例子中,我有3个以上的列需要转换,所以不能将它们全部写出来。另一种方法是使用gather()
然后从tidyr
开始使用spread()
,这是可能的,但不是非常优雅和耗时 试试这个:
d %>% mutate_each(funs(. * m), var1:var3)
@lukeA的答案是正确的。我只想指出的是,即使你使用了“正常的”
mutate
,你也不需要像在你的问题中那样多次调用它,但一旦这样:d%>%mutate(var1=var1*m,var2=var2*m,var3=var3*m)
mutate\u现在每个
都不赞成mutate\u all
和mutate\u at
d %>% mutate_each(funs(. * m), var1:var3)