2016-09-09 11 views
2

Wenn es eine Liste von ungleicher Anzahl von Zeilenvektoren ist (alle Vektoren haben 3 Spalten) wie unten:R-Gibt es eine Möglichkeit Liste mit variabler Anzahl von Zeilen zu einem Datenrahmen zu kombinieren

>typicalList 

[[1]] 
    col1   col2    col3 
1 12   10    ABC 
2 54   87    DEF 

[[2]] 
    col1   col2    col3 
1 64   9    GHI 
2 59   6    JKL 
3 43   4    PST 

Sind es möglich, einen Datenrahmen aus der obigen Liste mit einer neuen Spalte newColumn genannt zu haben, die unten wie folgt aussieht:

newColumn col1  col2  col3 
1   12  10  ABC 
1   54  87  DEF 
2   64  9  GHI 
2   59  6  JKL 
2   43  4  PST 

ldply(typicallist,rbind) Gebrauchte aber das spaltet alle Zeilen in der ursprünglichen Liste zu einem Vektor gehören, 5 unabhängige Datensätze in der Angabe Datenrahmen. Ist es möglich, den Datenrahmen wie oben zu haben, der (durch newColumn) Feld vorschlägt, dass zuerst zwei Aufzeichnungen vom ersten Vektor der Liste und die restlichen drei vom zweiten abgeleitet werden? Gibt es einen besseren Weg, dies in R zu realisieren?

Daten

typicalList <- list(structure(list(col1 = c(12L, 54L), col2 = c(10L, 87L), col3 = c("ABC", 
"DEF")), .Names = c("col1", "col2", "col3"), class = "data.frame", row.names = c("1", 
"2")), structure(list(col1 = c(64L, 59L, 43L), col2 = c(9L, 6L, 
4L), col3 = c("GHI", "JKL", "PST")), .Names = c("col1", "col2", 
"col3"), class = "data.frame", row.names = c("1", "2", "3"))) 
+0

'do.call ('rbind', Map (Funktion (x, y)) {x $ newColumn <- y; x}, typicalList, seq (typicalList))) ' – rawr

Antwort

1

Wir rbindlist von data.table mit dem idcol Argument

library(data.table) 
rbindlist(typicalList, idcol = "newColumn") 
# newColumn col1 col2 col3 
#1:   1 12 10 ABC 
#2:   1 54 87 DEF 
#3:   2 64 9 GHI 
#4:   2 59 6 JKL 
#5:   2 43 4 PST 

Oder nutzen bind_rows mit .id von dplyr

library(dplyr) 
bind_rows(typicalList, .id = "newColumn") 
# newColumn col1 col2 col3 
#1   1 12 10 ABC 
#2   1 54 87 DEF 
#3   2 64 9 GHI 
#4   2 59 6 JKL 
#5   2 43 4 PST 
Verwandte Themen