Rbind R 中列表的列表

Rowbind List of lists in R

我有一个像 out 这样的列表列表。在列表的每个列表中,我都有一个数据框(具有相同的结构,即相同的变量)。

out <- replicate(4, rep(list(NULL), 2), simplify = FALSE)

我的愿望是将属于第一个列表列表的所有数据帧与第二个列表一起进行行绑定(在我原来的练习中,我有超过 4 个列表,每个列表有 2 个列表......对于这个例子,我会做类似下面的事情:

dataframe1 <- rbind(out[[1]][[1]], out[[2]][[1]], out[[3]][[1]], out[[4]][[1]])
dataframe2 <- rbind(out[[1]][[2]], out[[2]][[2]], out[[3]][[2]], out[[4]][[2]])

关于如何以迭代方式更优雅地完成它的任何想法?

PS:抱歉没有分享真实数据。

这是使用 rlistpurr

的方法
do.call(rlist::list.zip, out) %>%
 purrr::map(~ do.call(rbind, .))

或者,甚至更多purrr

library(purrr)

out %>%
  do.call(rlist::list.zip, .) %>%
  map(~ reduce(., rbind))

如果您的框架结构相似或相同,并且您打算对所有框架使用相同的“东西”,通常最好使用 list of frames 而不是单独的元素。

out <- replicate(4, rep(list(mtcars[c(1,3),1:3]), 2), simplify = FALSE)
out[[1]][[1]]
#             mpg cyl disp
# Mazda RX4  21.0   6  160
# Datsun 710 22.8   4  108

lapply(1:2, function(ind) do.call(rbind, lapply(out, `[[`, ind)))
# [[1]]
#              mpg cyl disp
# Mazda RX4   21.0   6  160
# Datsun 710  22.8   4  108
# Mazda RX41  21.0   6  160
# Datsun 7101 22.8   4  108
# Mazda RX42  21.0   6  160
# Datsun 7102 22.8   4  108
# Mazda RX43  21.0   6  160
# Datsun 7103 22.8   4  108
# [[2]]
#              mpg cyl disp
# Mazda RX4   21.0   6  160
# Datsun 710  22.8   4  108
# Mazda RX41  21.0   6  160
# Datsun 7101 22.8   4  108
# Mazda RX42  21.0   6  160
# Datsun 7102 22.8   4  108
# Mazda RX43  21.0   6  160
# Datsun 7103 22.8   4  108

如果您已经在使用 dplyrdata.table,那么这些是相对等效的,但通常更安全一些:

lapply(1:2, function(ind) data.table::rbindlist(lapply(out, `[[`, ind), fill = TRUE, use.names = TRUE))
lapply(1:2, function(ind) dplyr::bind_rows(lapply(out, `[[`, ind)))