Rowbind 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))

当你的框架都是相似或相同的结构,并且你想要相同的"事物;对于所有这些元素,通常最好使用框架列表,而不是单个元素。

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)))

相关内容

  • 没有找到相关文章

最新更新