R:返回具有多列的data.frame的pmin或pmax

use*_*444 3 r dataframe

有没有办法选择多列数据帧的pmax/pmin?

我只想要返回最大值或最小值,而不是整行.

max <- tail(df, n=1)
max
#                       v1     v2     v3     v4     v5     v6     v7     v8
#2014-10-03 17:35:00  58.91  45.81  33.06  70.76  36.39  45.53  33.52  34.36

pmax(max)
#                       v1     v2     v3     v4     v5     v6     v7     v8
#2014-10-03 17:35:00  58.91  45.81  33.06  70.76  36.39  45.53  33.52  34.36
Run Code Online (Sandbox Code Playgroud)

对于这一行,我期望返回值为:

70.76
Run Code Online (Sandbox Code Playgroud)

...因为它是所有列的最大值.

the*_*ail 7

使用do.call调用pmax所有列一起比较的每一行的值,例如:

dat <- data.frame(a=1:5,b=rep(3,5))

#  a b
#1 1 3
#2 2 3
#3 3 3
#4 4 3
#5 5 3

do.call(pmax,dat)
#[1] 3 3 3 4 5
Run Code Online (Sandbox Code Playgroud)

当你pmax直接调用整个data.frame时,它只有一个参数传递给函数,没有什么可以比较它.因此,它只返回提供的参数,因为它必须是最大值.它适用于非数字和数字参数,即使它可能没有多大意义:

pmax(7)
#[1] 7

pmax("a")
#[1] "a"

pmax(data.frame(1,2,3))
#  X1 X2 X3
#1  1  2  3
Run Code Online (Sandbox Code Playgroud)

使用do.call(pmax,...)与data.frame意味着你通过data.frame作为参数列表中的每一列pmax:

do.call(pmax,dat) 
Run Code Online (Sandbox Code Playgroud)

因此相当于:

pmax(dat$a, dat$b)
Run Code Online (Sandbox Code Playgroud)

  • @JASC - `do.call(pmax, c(dat, na.rm=TRUE))` (2认同)