Wenn ich richtig verstehe, die Operation erfordert, dass Sie tatsächlich mehrere Schritte durchführen möchten:
1: Gruppe sowohl ID
und A
und die Mittel V
berechnen.
2: Nehmen Sie das Ergebnis von Schritt 1 und umformen es von lang auf Breitformat, so dass jede Gruppe aus der ursprünglichen Spalte A
im resultierenden data.frame seine eigenen Spalte hat.
3: Separat, Gruppe von nur ID
und berechnen Sie die Mittel von V
.
4: Die Ergebnisse der Schritte 2 und 3 in einem einzigen data.frame auf ID
zusammenführen.
df <- data.frame(ID=c(1L,1L,1L,2L,2L),A=c('M','D','M','D','D'),V=c(4L,6L,10L,3L,7L),stringsAsFactors=F);
merge(reshape(aggregate(V~ID+A,df,mean),dir='w',idvar='ID',timevar='A'),aggregate(V~ID,df,mean));
## ID V.D V.M V
## 1 1 6 7 6.666667
## 2 2 5 NA 5.000000
(ich glaube, Sie einen Fehler gemacht hat, wenn aus eingeben:
Dies kann mit ein paar Anrufen zu aggregate()
, ein Aufruf reshape()
auf dem ersten Aggregationsergebnis und schließlich einen Aufruf an merge()
erfolgen Ihre erwartete Ausgabe, der Mittelwert von V
für Gruppe ID=1
ist 6.666667, nicht 10.)
Sie sollten wirklich ein wenig mehr auf Ihre erwartete Ausgabe erarbeiten. –
Was ist die Spalte "V" im Ergebnis? –
ist der Mittelwert der ID. aber der Wert sollte 6.666667 statt 10 sein. – klo