将嵌套列表转换为数据帧

时间:2016-10-05 03:42:53

标签: r reshape2

我在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
.
.
.

2 个答案:

答案 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