首页 > 解决方案 > 如何使用 dplyr 在多个变量上获得 pmax?

问题描述

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

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

它工作得很好,但如果我用pmax而不是做同样的事情rowMeans

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

我明白了

Error: Column `new` is of unsupported class data.frame

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

mtcars %>% mutate(new = pmax(mpg,qsec,carb,na.rm = TRUE))

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

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

谢谢!

标签: rdplyr

解决方案


使用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
#...

推荐阅读