在每列中找到每两行的最大值

3
我想在每两行(例如)中的每一列中找到最大值,如何用R实现?例如:
matrix(c(3,1,20,5,4,12,6,2,9,7,8,7), byrow=T, ncol=3) 

我希望您能输出这样的格式。
matrix(c(5,4,20,7,8,9), byrow=T, ncol=3) 
4个回答

5
这是一种解决方法。
  1. 定义一个包含所需组的信息的向量。在这种情况下,我使用rep重复数字序列。
  2. 然后定义一个帮助函数来计算数组的列最大值——这是max的简单应用。
  3. 最后,使用sapply和一个匿名函数,将colMax应用于每个分组的数组子集。
代码:
groups <- rep(1:2, each=2)
colMax <- function(x)apply(x, 2, max)
t(
    sapply(unique(groups), function(i)colMax(x[which(groups==i), ]))
)

结果如下:
     [,1] [,2] [,3]
[1,]    5    4   20
[2,]    7    8    9

@DWin 我不确定你的想法是什么。我认为只要你正确定义“groups”,这就是一般化的。但是,原帖并没有明确说明组的定义是什么,所以我让用户自己先定义它。 - Andrie
我在抱怨小组定义,反思后我认为我不应该说什么。我会稍后删除。 - IRTFM

2

一行很长的内容:

t(sapply(seq(1,nrow(df1),by=2),function(i) apply(df1[seq(i,1+i),],2,max)))

1

另一个选项是,

do.call(rbind, by(m, gl(nrow(m)/2, 2), function(x) apply(x, 2, max)))

0
apply(mat, 2, function(x) tapply(x, # work on each column
       # create groups of 2 vector of proper length:  1,1,2,2,3,3,4,4 ....
      rep(1:(length(x)/2), each=2, len=length(x)) 
       max))

  [,1] [,2] [,3]
1    5    4   20
2    7    8    9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接