2017-05-28 5 views
0

Ich habe ein data.frame, die (allerdings mit einer größeren Anzahl von Spalten und Zeilen) wie folgt aussieht:Wie aggregieren doppelten Zeilen mit mehreren Spalten in Datenrahmen

Gene  Cell1 Cell2 Cell3  
1  A   2  7  8 
2  A   5  2  9 
3  B   2  7  8 
4  C   1  4  3 

Ich mag die Zeilen summieren, die die haben gleicher Wert in Gene, um so etwas zu bekommen:

Gene  Cell1 Cell2 Cell3  
1  A   7  9  17 
2  B   2  7  8 
3  C   1  4  3 

Basierend auf den Antworten auf frühere Fragen, ich habe versucht, aggregate zu verwenden, aber ich konnte nicht verstehen, wie ich das obige Ergebnis bekommen. Dies ist, was ich versucht habe:

aggregate(df[,-1], list(df[,1]), FUN = sum) 

Hat jemand eine Idee von dem, was ich falsch mache?

+0

was mit dem Ergebnis nicht stimmt Sie mit Aggregat haben? – Bea

Antwort

2
aggregate(df[,-1], list(Gene=df[,1]), FUN = sum) 
# Gene Cell1 Cell2 Cell3 
# 1 A  7  9 17 
# 2 B  2  7  8 
# 3 C  1  4  3 

geben Sie die Ausgabe, die Sie suchen.

+0

Es gibt einen Fehler, wenn wir das obige ausführen: 'Fehler in aggregate.data.frame (df [, -1], Liste (Gene = df [, 1]), FUN = Summe): Argumente müssen dieselbe Länge haben –

+0

@ManojKumar Bitte fügen Sie die Ausgabe von 'str (df)' zu Ihrem Beitrag hinzu. – lukeA

+0

Sure @lukeA hier ist es: 'Klassen 'data.table' und 'data.frame': \t 4 obs. von 4 Variablen: $ Gene: chr "A" "A", "B", "C" $ Zelle1: int 2 5 2 1 $ Cell2: int 7 2 7 4 $ Cell3: int 8 9 8 3 - attr (*, ".internal.selfref") = ' –

1

Oder mit dplyr:

library(dplyr) 
df %>% 
    group_by(Gene) %>% 
    summarise_all(sum) %>% 
    data.frame() -> newdf # so that newdf can further be used, if needed 
Verwandte Themen