This question already has an answer here:
Return pmin or pmax of data.frame with multiple columns

(1个答案)


在4个月前关闭。




在有人将此问题标记为重复之前,我已经看过this one,它不能解决我的问题。
如果我尝试
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来获取错误。

谢谢!

最佳答案

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

09-11 12:12