打印每对列的最大值

时间:2015-02-23 19:17:26

标签: r row max

如果我问这个问题是否已经被问过,我很抱歉,但我找不到它..

AGE<-c(25, 37, 57, 72, 48, 28, 31, 57, 43, 38)
LLS<-c(24,  1, 24, 24, 14, 21,  4, 12,  8,  1)
RLS<-c(11,  1, 14, 21,  7, 21, 22,  8, 27, 12)
dat <- data.frame(AGE, LLS, RLS)

并希望为每行获取列LLSRLS的最大值。

请告诉我怎么做? 感谢。

2 个答案:

答案 0 :(得分:2)

您可以尝试pmax

do.call(pmax, dat[-1])
#[1] 24  1 24 24 14 21 22 12 27 12

如果这是针对每对列的,则可以使用combn

res <- combn(names(dat),2, FUN=function(x) do.call(pmax,dat[x]))
colnames(res) <- apply(combn(names(dat),2),2, paste, collapse="_")

答案 1 :(得分:2)

我相信对于每一行,您希望返回单个值,以RLS或LLS中较高者为准。对?

如果是这样,Akrun的答案是好的。或者,您可以在matrixStats包中使用方便的rowMaxs()函数。在我看来,它更直接一点,但这是唯一真正的优势。 这是代码,你可以组合成更少的步骤,但我写出来以明确发生了什么。

AGE<-c(25, 37, 57, 72, 48, 28, 31, 57, 43, 38)
LLS<-c(24,  1, 24, 24, 14, 21,  4, 12,  8,  1)
RLS<-c(11,  1, 14, 21,  7, 21, 22,  8, 27, 12)
dat <- data.frame(AGE, LLS, RLS)

创建数据框的子集,仅包括您想要的列

dat2 <- dat[,2:3]             

将新数据框转换为矩阵,以便rowMaxs()不会抱怨

dat3 <- as.matrix(dat2)

加载matrixStats包并调用rowMaxs()

library(matrixStats)
rowMaxs(dat3)

[1] 24  1 24 24 14 21 22 12 27 12