2016-07-26 29 views
0

Ich habe einen Daten-Rahmen wie folgt aus (mehrere Spalten):Wie doppelte Zeilen zu konsolidieren und anzuzeigen anderen Spalten

ID A B C D 
1 1 0 x1 y 
1 0 0 x1 y 
1 0 0 x1 y 
2 0 0 x6 v 
2 0 1 x6 v 
2 0 0 x6 v 
3 0 1 r5 t 
3 1 0 r5 t 
3 0 0 r5 t 

Spalte ID ist einzigartig und ich möchte alle dupliziert und Aggregat Spalte A entfernen und B durch Zeigen von max oder sum (es kann maximal nur eine '1' für jede ID in Spalte A oder B geben) und Spalten C und D anzeigen, die für alle eindeutigen IDs denselben Wert haben.

ID A B C D 
1 1 0 x1 y 
2 0 1 x6 v 
3 1 1 r5 t 

von

mit
aggregate(A~ID,data=df,FUN=sum) 

erhalte ich nur ID und Spalte A, aber wie könnte ich aggregieren A und B in der gleichen Zeit und auch zeigen, Spalten C und D

Antwort

2

können Sie . verwenden um die beiden Spalten A und B zu aggregieren und C und als Gruppenvariablen anzugeben, wenn sie in den Ergebnissen angezeigt werden sollen:

aggregate(. ~ ID + C + D,data=df,FUN=sum) 
# ID C D A B 
# 1 3 r5 t 1 1 
# 2 2 x6 v 0 1 
# 3 1 x1 y 1 0 

Ein weiterer Trick ist cbind zu verwenden, explizit angeben, welche Spalten aggregieren möchten:

aggregate(cbind(A, B) ~ ID + C + D,data=df,FUN=sum) 

, die das gleiche Ergebnis liefert.

+0

danke. Ich habe mehr als 70 Spalten wie C und D zur Anzeige. Gibt es eine Möglichkeit, 70 Namen nicht einzugeben? – Sajjad

+0

Alle 70 Spalten sind für jede ID eindeutig? Könnte versuchen, etwas wie: 'Aggregat (Cbind (A, B) ~., Daten = Df, FUN = Summe)' – Psidom

+0

Sie alle haben die gleichen Werte für jede eindeutige ID wie Spalte C und D. – Sajjad