Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在多个列上同时使用mutate,而不显式地写出它们_R_Dplyr - Fatal编程技术网

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)