2012-03-29 20 views
3

2行ごとに最大値を求める(たとえば)。どのようにRでそれを行うには?例R:各列の2行ごとに最大値を見つける

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. 最後に、グループ化された配列サブセットのそれぞれにcolMaxを適用する無名関数を使用してsapplyを使用してください。

コード:

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

非常にあなたの助けを借りて – lyn

+0

@DWin私はあなたが何を持っているか分かりません。私は**あなたが 'groups'を正しく定義している限り、これが一般化すると思う**。しかし、OPの定義は正確にはっきりしていないので、私はそれをユーザーに任せて、その前景を定義しました。 – Andrie

+0

それは私が泣いていたというグループ定義だったし、私は何も言わなかったと思う。私はちょっと削除します。 –

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 
関連する問題