2016-05-09 6 views
0

ich einen Datenrahmen wie folgt berechnen:einen Datenrahmen Umwandlung und den Mittelwert von Gruppe haben

ID A V 
1 M 4 
1 D 6 
1 M 10 
2 D 3 
2 D 7 

Was ich in diese umwandeln wollen:

ID M D V 
1 7 6 10 
2 5 5 

Grundsätzlich möchte ich die berechnen nach Gruppe. Ich habe "Aggregat" und "Plyr" -Paket verwendet, aber keinen Erfolg.

Vielen Dank im Voraus.

+0

Sie sollten wirklich ein wenig mehr auf Ihre erwartete Ausgabe erarbeiten. –

+0

Was ist die Spalte "V" im Ergebnis? –

+0

ist der Mittelwert der ID. aber der Wert sollte 6.666667 statt 10 sein. – klo

Antwort

2

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.)

+1

Danke, du liest meine Meinung :) – klo