R:在每列中每两行找到最大值

时间:2012-03-29 07:57:58

标签: r matrix

我希望每2行(例如)在每列中找到最大值。如何在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 个答案:

答案 0 :(得分:5)

这是一种方法。

  1. 定义一个包含所需groups信息的向量。在这种情况下,我使用rep重复一系列数字。
  2. 然后定义一个辅助函数来计算数组的列最大值 - 这是apply的简单max
  3. 最后,使用sapply匿名函数将colMax应用于每个分组的数组子集。
  4. 代码:

    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
    

答案 1 :(得分:1)

一条长线:

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

答案 2 :(得分:1)

另一种选择,

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

答案 3 :(得分: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