Ich habe eine Liste mit Listen wie folgt aus:Namensgebung und rbinding alle Elemente (dfs, Matrizen, Vektoren, etc.) aus den Listen der Liste
# output from a package function
A <- list(a = matrix(1:9,ncol=3),
b = matrix(1:8,ncol=4),
c = 1.5)
B <- list(a = matrix(11:19,ncol=3),
b = matrix(11:18,ncol=4),
c = 2.5)
# list with all outputs (from loaded=lapply(filenames, function(x) get(load(x))))
superlist <- list(A, B))
Was ich zuerst tun möchte, ist den Namen hinzufügen jedes Listenelement (A, B) für alle Listenelemente zweiter Ordnung. Zum Beispiel würde B werden:
B <- list(a = cbind(matrix(11:19,ncol=3),c("B","B","B")),
b = cbind(matrix(11:18,ncol=4),c("B","B")),
c = c(2.5,"B"))
Dann ist das Ziel, alle Matrizen, Werte oder Datenrahmen rbind (a, b, c) mit dem gleichen Namen zusammen, so dass ich hätte:
superlist <- list(a = rbind(cbind(matrix(1:9,ncol=3),c("A","A","A")),cbind(matrix(11:19,ncol=3),c("B","B","B"))),
b = rbind(cbind(matrix(1:8,ncol=4),c("A","A")),cbind(matrix(11:18,ncol=4),c("B","B"))),
c = rbind(c(1.5,"A"),c(2.5,"B")))
für das rbinding, das beste, was ich habe ist dies (von rbind all dataframes in a list of lists by name):
do.call("rbind",lapply(superlist ,function(x) x[["a"]]))
es wird jedoch nur für ein Listenelement (und ich habe mehr als 20). Ich weiß, dass ich eine Schleife schreiben kann, aber da ich die Funktion oft benutzen werde, würde ich gerne wissen, wie man das besser macht.
Ich bin mir bewusst, dass mehrere Fragen dazu gestellt werden, aber keiner von ihnen hat genau das gleiche Problem (zum Beispiel einige haben nur Datenrahmen als Liste von Listenelementen, manchmal alle von der gleichen Größe). Obwohl einige Fragen hilfreich waren, gab mir keiner wirklich genügend Informationen, um mein Problem zu lösen.
- rbind dataframes in a list of lists # Gruppen durch die zweite Liste, nicht die erste
- Convert a list of data frames into one data frame # nur eine Liste
- rbinding a list of lists of dataframes based on nested order
- ...
Danke
"Ich möchte zuerst den Namen jedes Listenelements (A, B) zu allen Listenelementen zweiter Ordnung hinzufügen." - Tu das nicht. Sie kontaminieren die Zahlen in Ihren Daten mit Zeichen aus den Namen, zB in 'cbind (Matrix (11: 19, ncol = 3), c (" B "," B "," B "))' – Frank