2016-10-05 6 views
1

Ich sah ähnliche Fragen in Stackoverflow beantwortet, aber ich konnte nicht den Weg finden, meine spezifische Situation anzupassen, also öffne ich eine neue.Konvertieren geschachtelte Liste in Dataframe

Mein Ziel ist es, eine verschachtelte Liste wie folgt zu konvertieren:

a:list of 2 
..$ time: num[1:5] 1 2 3 4 5 
..$ int: num[1:5] 6 7 8 9 0 

b:list of 2 
..$ time: num[1:5] 1 2 3 4 5 
..$ int: num[1:5] 6 7 8 9 0 

in einen Datenrahmen wie folgt aus:

Name time int 
a 1 6 
a 2 7 
. 
. 
. 
b 1 6 
... 

Ich versuchte melt in reshape2 zu bedienen und ich habe Zeit und int als die Werte in einer Spalte (L2). Etwas wie folgt aus:

Value L2 L1 
1  time a 
2  time a 
. 
. 
. 
6  int a 
. 
. 
. 

Antwort

5

Sie können ldply von plyr Paket verwenden

library(plyr) 
ldply(lst, data.frame, .id = "Name") 

Unter Dummy-Daten von @SymbolixAU ‚s Antwort, haben Sie die Ausgabe als

# Name time int 
#1 a 1 5 
#2 a 2 6 
#3 a 3 7 
#4 b 1 1 
#5 b 2 2 
#6 b 3 3 
#7 b 4 4 
+1

Es scheint, dass LDply für meinen Datensatz funktioniert. Ich bekomme keine falschen Zeiten und Paare. –

4

rbindlist vom data.table Paket sollte

## some dummy data 
lst <- list(a = list(time = c(1,2,3), 
        int = c(5,6,7)), 
      b = list(time = c(1,2,3,4), 
        int = c(1,2,3,4))) 

# str(lst) 
# List of 2 
# $ a:List of 2 
# ..$ time: num [1:3] 1 2 3 
# ..$ int : num [1:3] 5 6 7 
# $ b:List of 2 
# ..$ time: num [1:4] 1 2 3 4 
# ..$ int : num [1:4] 1 2 3 4 

library(data.table) 

rbindlist(lst, idcol = "id") 

#  id time int 
# 1: a 1 5 
# 2: a 2 6 
# 3: a 3 7 
# 4: b 1 1 
# 5: b 2 2 
# 6: b 3 3 
# 7: b 4 4 

tun, und wenn Sie es wollen zurück als data.frame

df <- rbindlist(lst, idcol = "id") 
setDF(df) 

# str(df) 
# 'data.frame': 7 obs. of 3 variables: 
# $ id : chr "a" "a" "a" "b" ... 
# $ time: num 1 2 3 1 2 3 4 
# $ int : num 5 6 7 1 2 3 4 
+0

Vielen Dank für Ihre Hilfe. Aber auf diese Weise verlor ich die Informationen des ersten Listennamens als eine Spalte in meinem Datenrahmen. Zum Beispiel ist mein "a" und "b" weg und ich kann nicht sagen, welche Zeit für a oder b ist. –

+0

@juanwang - 'rbindlist (lst, idcol =" id ") - es gibt ein' idcol'-Argument, das dafür sorgt. – thelatemail

+0

Das hat das Problem gelöst. Danke vielmals. –

Verwandte Themen