将列表的元素组合成单个元素

时间:2018-01-15 19:40:38

标签: r list

我在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是从中派生值的列表元素。 “值”列包含列表中的所有值。

有办法做到这一点吗?

1 个答案:

答案 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周围发布)可能更有效。

相关问题