在R中的多个数据帧中查找每个单元格中的最大值

在R中的多个数据帧中查找每个单元格中的最大值,r,dataframe,max,R,Dataframe,Max,我试图获得三个不同数据集中每个单元格的最大值。作为一个玩具示例,想象以下三个数据帧: set.seed(123) a <- data.frame(matrix(sample(20,10), ncol = 5, nrow = 5)) b <- data.frame(matrix(sample(20,10), ncol = 5, nrow = 5)) c <- data.frame(matrix(sample(20,10), ncol = 5, nrow = 5)) >

我试图获得三个不同数据集中每个单元格的最大值。作为一个玩具示例,想象以下三个数据帧:

set.seed(123)
a <- data.frame(matrix(sample(20,10), ncol = 5, nrow = 5))
b <- data.frame(matrix(sample(20,10), ncol = 5, nrow = 5))
c <- data.frame(matrix(sample(20,10), ncol = 5, nrow = 5))
 
> a
  X1 X2 X3 X4 X5
1 15  2 15  2 15
2 19  6 19  6 19
3 14 11 14 11 14
4  3  5  3  5  3
5 10  4 10  4 10
> b
  X1 X2 X3 X4 X5
1 14 10 14 10 14
2  5  7  5  7  5
3  9 15  9 15  9
4  3 18  3 18  3
5  8 17  8 17  8
> c
  X1 X2 X3 X4 X5
1  4  5  4  5  4
2 14 12 14 12 14
3 17 10 17 10 17
4 11 16 11 16 11
5  7  9  7  9  7
我想获得一个相同维度的新数据帧,其中每个单元在a、b和c上都有最大值。例如,新数据帧的单元格[1,1]应该具有df a的值15。我通过在列之间循环并获得最大值来实现这一点,但速度相当慢。

您可以使用pmax:

您可以使用pmax:


以下是一些其他选项,但不如pmax by简洁

rowMaxs-wit映射 大堆
以下是一些其他选项,但不如pmax by简洁

rowMaxs-wit映射 大堆 我们也可以使用do.call

我们也可以使用do.call

pmax(a, b, c)
#OR
Reduce(pmax, list(a, b, c))

#  X1 X2 X3 X4 X5
#1 15 10 15 10 15
#2 19 12 19 12 19
#3 17 15 17 15 17
#4 11 18 11 18 11
#5 10 17 10 17 10
> library(matrixStats)

> list2DF(Map(function(...) rowMaxs(cbind(...)),a,b,c))
  X1 X2 X3 X4 X5
1 15 10 15 10 15
2 19 12 19 12 19
3 17 15 17 15 17
4 11 18 11 18 11
5 10 17 10 17 10
> lst <- list(a,b,c)

> data.frame(apply(array(unlist(lst),c(dim(lst[[1]]),length(lst))),1:2,max))
  X1 X2 X3 X4 X5
1 15 10 15 10 15
2 19 12 19 12 19
3 17 15 17 15 17
4 11 18 11 18 11
5 10 17 10 17 10
do.call(pmax, list(a, b, c))