如何使用dplyr获得多个变量的pmax?

iag*_*ago 5 r dplyr

在有人将此问题标记为重复之前,我已经看到过这个问题了,它不能解决我的问题。如果我尝试

mtcars %>% mutate(new = rowMeans(select(.,c(1,7)), na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)

它很好地工作,但是如果我用pmax而不是这样做rowMeans

mtcars %>% mutate(new = pmax(select(.,c(1,7)), na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)

我懂了

Error: Column `new` is of unsupported class data.frame
Run Code Online (Sandbox Code Playgroud)

为什么?在这个例子中,我可以得到输出

mtcars %>% mutate(new = pmax(mpg,qsec,carb,na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)

但是我尝试使用它,select因为我需要一些真实的数据select helper或由列位置确定的变量(例如1,7在示例中),否则我也会出错。

如链接问题的答案中所建议,我也尝试使用do.call获取错误。

谢谢!

Sot*_*tos 5

使用do.call我们可以在pmax不指定变量的情况下进行评估,即

mtcars %>% 
  mutate(new = do.call(pmax, c(select(., c(1, 7)), na.rm = TRUE)))

#    mpg cyl  disp  hp drat    wt  qsec vs am gear carb   new
#1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4 21.00
#2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4 21.00
#3  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1 22.80
#4  21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1 21.40
#5  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2 18.70
#6  18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1 20.22
#7  14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4 15.84
#...
Run Code Online (Sandbox Code Playgroud)