【问题标题】:R: finding maximum value every two rows in each columnR:在每列中每两行查找最大值
【发布时间】:2012-03-29 07:57:57
【问题描述】:

我想在每列中找到每 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) 

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    这是一种方法。

    1. 定义一个向量,其中包含您想要的groups 的相关信息。在本例中,我使用rep 重复一个数字序列。
    2. 然后定义一个辅助函数来计算数组的列最大值——这是一个简单的applymax
    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。但是 OP 对组定义的确切含义不是很清楚,所以我把它留给用户预先定义。
    • 这是我一直在纠结的组定义,经过反思,我认为我不应该说什么。一会儿我删。
    【解决方案2】:

    一条长线:

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

    【讨论】:

      【解决方案3】:

      另一种选择,

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

      【讨论】:

        【解决方案4】:
        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
        

        【讨论】:

          猜你喜欢
          • 2020-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-07
          • 1970-01-01
          相关资源
          最近更新 更多