我有一个带有嵌套数据框列表的列表。我的数据结构如下:
如何将嵌套列表的所有数据框合并为一个数据框?在此示例中,我希望将4个数据帧合并(rbind)为一个!对于此示例,请考虑初始列表的长度为3而不是58。
提前谢谢!
答案 0 :(得分:1)
首先,在0、18和bind_rows
中循环,然后使用map_dfr
绑定较高元素的行,即将0和18绑定在一起。
library(purrr)
lst=list(`0`=list(`1`=iris[1:5,]),`18`=c(`1`=list(iris[1:5,]),`2`=list(iris[1:5,])))
map_dfr(ls,~bind_rows(.,.id='id'))
#OR
bind_rows(unlist(lst,recursive = FALSE),.id = 'id')
另一种保存选项是使用unlist
和purrr::imap
生成 id 列,该列代表每个数据帧的完整路径
imap_dfr(unlist(lst,recursive = FALSE), ~data.frame(id=.y, .x, stringsAsFactors = FALSE))
id Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 0.1 5.1 3.5 1.4 0.2 setosa
2 0.1 4.9 3.0 1.4 0.2 setosa
3 0.1 4.7 3.2 1.3 0.2 setosa
4 0.1 4.6 3.1 1.5 0.2 setosa
5 0.1 5.0 3.6 1.4 0.2 setosa
6 18.1 5.1 3.5 1.4 0.2 setosa
7 18.1 4.9 3.0 1.4 0.2 setosa
8 18.1 4.7 3.2 1.3 0.2 setosa
9 18.1 4.6 3.1 1.5 0.2 setosa
10 18.1 5.0 3.6 1.4 0.2 setosa
11 18.2 5.1 3.5 1.4 0.2 setosa
12 18.2 4.9 3.0 1.4 0.2 setosa
13 18.2 4.7 3.2 1.3 0.2 setosa
14 18.2 4.6 3.1 1.5 0.2 setosa
15 18.2 5.0 3.6 1.4 0.2 setosa