我在stackoverflow中看到了类似的问题,但我找不到适合我特定情况的方法,所以我开了一个新的。
我的目标是转换这样的嵌套列表:
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
进入这样的数据框:
Name time int
a 1 6
a 2 7
.
.
.
b 1 6
...
我尝试在melt
中使用reshape2
,我将时间和int作为一列(L2)中的值。像这样:
Value L2 L1
1 time a
2 time a
.
.
.
6 int a
.
.
.
答案 0 :(得分:5)
rbindlist
包的 data.table
应该
## 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
如果你想要它回到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
答案 1 :(得分:5)
您可以使用ldply
包
plyr
library(plyr)
ldply(lst, data.frame, .id = "Name")
从@SymbolixAU的答案中获取虚拟数据,输出为
# 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