有没有办法选择多列数据帧的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)
...因为它是所有列的最大值.
使用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)