2012-03-29 150 views
3

我想在每列中找到每兩行(比如說)的最大值。如何在R中做到這一點?例如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) 

回答

5

輸出下面是做這件事的一種方式。

  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 
+0

Tq非常感謝您的幫助 – lyn 2012-03-29 08:55:26

+0

@DWin我不確定你的想法。我**認爲**這個概括,只要你正確定義'groups'。但是OP並不十分清楚組定義是什麼,所以我把它留給用戶來定義。 – Andrie 2012-03-29 17:55:30

+0

這是我所wh噓的小組定義,反思之餘我想我什麼都不應該說。我會稍微刪除。 – 2012-03-29 18:39:59

1

甲一個長行:

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 
相關問題