首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R rbind:连接嵌套列表中的每个元素

R rbind:连接嵌套列表中的每个元素
EN

Stack Overflow用户
提问于 2019-03-01 09:40:32
回答 1查看 438关注 0票数 2

我很难将data.frames连接起来,这些元素是R中列表中的元素,我已经用for循环实现了第一个原始解决方案,但是(当然)随着列表长度的增长,它变得非常慢。

(更新:我已将"message“元素添加到每个嵌套列表中)

下面是示例代码:

代码语言:javascript
复制
list1 = list()
list1[[1]] = list(df = data.frame(A = 1 : 10, B = 30 : 21), 
                  message = "first list")
list1[[2]] = list(df = data.frame(A = 11 : 20, B = 20 : 11), 
                  message = "second list")
list1[[3]] = list(df = data.frame(A = 21 : 30, B = 30 : 21), 
                  message = "third list")

dfFinal = data.frame()
for(nIndexList in 1 : length(list1)) {
  dfFinal = rbind(dfFinal, list1[[nIndexList]]$df)
}

有没有更快的方法来做到这一点(例如,矢量化)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-01 09:47:23

更新

根据新的需求(每个子列表现在包含一个数据和向量),我们必须对data.frame进行筛选。

代码语言:javascript
复制
do.call(rbind, c(Filter(is.data.frame, unlist(list1, recursive = FALSE)),
                 make.row.names = FALSE))

初始答案(每个子列表只包含一个sinlge数据)

您可以将unlist与参数recursive = FALSE一起使用,然后使用do.call(rbind, ...)

代码语言:javascript
复制
do.call(rbind, c(unlist(list1, recursive = FALSE), make.row.names = FALSE))
#    A  B
#1   1 30
#2   2 29
#3   3 28
#4   4 27
#5   5 26
#6   6 25
#7   7 24
#8   8 23
#9   9 22
#10 10 21
#11 11 20
# ...

make.row.names = FALSE也传递给rbind

如果速度是一个问题,你可以使用data.table

代码语言:javascript
复制
data.table::rbindlist(unlist(list1, recursive = FALSE))

一种tidyverse方式是

代码语言:javascript
复制
dplyr::bind_rows(purrr::flatten(list1))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54941832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档