2012-03-29 12 views

Antwort

5

Hier ist eine Möglichkeit, es zu tun.

  1. Definieren Sie einen Vektor, der Informationen über die gewünschte groups enthält. In diesem Fall verwende ich rep, um eine Folge von Zahlen zu wiederholen.
  2. Definieren Sie dann eine Hilfsfunktion, um das Spaltenmaximum eines Arrays zu berechnen - das ist ein einfacher apply von max.
  3. schließlich verwenden Sie sapply mit einer anonymen Funktion, die colMax auf jedes Ihrer gruppierten Array-Teilmengen gilt.

Der Code:

groups <- rep(1:2, each=2) 
colMax <- function(x)apply(x, 2, max) 
t(
    sapply(unique(groups), function(i)colMax(x[which(groups==i), ])) 
) 

Die Ergebnisse:

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

Tq sehr viel für Ihre Hilfe – lyn

+0

@DWin Ich bin mir nicht sicher, was Sie im Sinn haben. Ich denke **, dass dies verallgemeinert wird, solange Sie "Gruppen" korrekt definieren. Aber das OP ist nicht sehr klar, was genau die Gruppendefinition ist, also habe ich es dem Benutzer überlassen, das im Voraus zu definieren. – Andrie

+0

Es war die Gruppendefinition, über die ich gejammert habe, und bei Nachdenken denke ich, ich hätte nichts sagen sollen. Ich werde in ein bisschen löschen. –

1

A eine lange Zeile:

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

Eine weitere Option,

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 
Verwandte Themen