我在R中有一个看起来像这样的列表。
> list.data <- list(c(1,2,3), c(4,5), c(6,7,8,9,10))
> list.data
[[1]]
[1] 1 2 3
[[2]]
[1] 4 5
[[3]]
[1] 6 7 8 9 10
(实际列表更长,并且接近1000个元素,每个元素的长度不同)
我想将上面列表的元素组合成一个数据框,以便输出看起来像这样。 ID表示从中派生相应值的列表元素
基本上它应该看起来像使用R代码直接创建的以下数据框。
> list.data.final <- data.frame("ID"=numeric(10), "value"=numeric(10))
> list.data.final$ID <- c(1,1,1,2,2,3,3,3,3,3)
> list.data.final$value <- 1:10
> list.data.final
ID value
1 1 1
2 1 2
3 1 3
4 2 4
5 2 5
6 3 6
7 3 7
8 3 8
9 3 9
10 3 10
ID是从中派生值的列表元素。 “值”列包含列表中的所有值。
有办法做到这一点吗?
答案 0 :(得分:2)
试试这个:
list.data <- list(c(1,2,3), c(4,5), c(6,7,8,9,10))
data.frame(
id=rep(seq_along(list.data), lengths(list.data)),
value=unlist(list.data)
)
# id value
# 1 1 1
# 2 1 2
# 3 1 3
# 4 2 4
# 5 2 5
# 6 3 6
# 7 3 7
# 8 3 8
# 9 3 9
# 10 3 10
事后看来,问题是From list to data frame (again...) keeping element names as row names的重复......我很高兴看到我提出了类似的答案!唯一的区别是q / a依赖于名为 - list
,这个没有名字;它使用sapply(..., length)
,其中lengths
(在R-3.2周围发布)可能更有效。