2017-04-26 7 views
3

Ich habe eine Liste (gesamt) von 12 data.frames (egal Form) und ich brauche die Summe jeder Zeile der Liste in colum 2.Sum Elemente in einer Liste von data.frames

I sind für eine intelligentere Art und Weise sucht die Elemente auf der Liste wie folgt zusammenfassen:

Total[[1]][,2] + Total[[2]][,2] + Total[[3]][,2] +..+Total[[12]][,2] 

colum 2 hat eine Länge von 70, so sollte das Ergebnis ein Vektor der Länge 70

Hoffnung jemand weiß, dass er Recht sapply, lapply oder apply Funktionscode

+2

Vielleicht 'reduzieren ("+", lapply (Total "[[", 2))' –

+0

@docendodiscimus ich, dass tought genau Lösung. Warum fügst du es nicht als Antwort hinzu und du bekommst eine Erwähnung von mir. –

+2

Wenn eine der Antworten Ihr Problem löst, akzeptieren Sie sie, indem Sie auf das Häkchen daneben klicken. Siehe auch: http://stackoverflow.com/help/someone-answers – Cath

Antwort

11

Hier ist eine Option:

Reduce("+", lapply(Total, "[[", 2)) 

ist jedoch zu beachten, dass dies nicht gut wegen + mit potentiellen NAs spielt.

Hier ist ein Beispiel mit integrierten Daten:

Reduce("+", lapply(list(iris, iris, iris), "[[", 2)) 
6

Wir rowSums nach dem Extrahieren der zweiten Spalte von list von data.frame verwenden können. Bei fehlenden Werten wird die na.rm=TRUE dafür sorgen.

rowSums(sapply(Total, `[[`, 2), na.rm = TRUE) 

Oder eine andere Option ist tidyverse

library(tidyverse) 
Total %>% 
     map(~.[[2]]) %>% 
     #or as suggested in the comments 
     #map(2) %>% 
     reduce(`+`) 
+0

@docendodiscimus Ich habe versucht mit Ihrer 'liste (iris, iris, iris)' und es funktioniert gut für mich – akrun

+0

@docendodiscimus Okay, als ich getestet habe, ich nutzte das '[['], aber irgendwie, update es hier nicht. Danke – akrun

+1

@akrun für mich, mit '[' anstelle von '[[' führte auch zu einem Fehler – Jaap

Verwandte Themen