首页 > 解决方案 > 如何在 R 中绑定子列表

问题描述

我有一个数据框列表的列表。我正在尝试做的事情可以通过以下方式描述:

rbind(datalistpairs[[1]][[1]][[1]],datalistpairs[[1]][[2]][[1]],datalistpairs[[1]][[3]][[1]])

我的子列表有 j 长度,所以实际上我正在尝试类似(j 次):

rbind(datalistpairs[[1]][[1]][[1]],
datalistpairs[[1]][[2]][[1]],
datalistpairs[[1]][[3]][[1]],...,
datalistpairs[[1]][[j]][[1]])

最有效的方法是什么?

具有三个迭代的输出创建了一个如下所示的数据框:

      LAT    LON
   31  43.1818 5.2348
   311 43.1818 5.2348
   312 43.1818 5.2348

编辑:我提供以下示例数据

datalistpairs = list(list(list(l1 = data.frame(LAT = 1, LON = 2), 
                               l2 = data.frame(LAT = 1, LON = 2)),
                          list(l1 = data.frame(LAT = 1, LON = 2), 
                               l2 = data.frame(LAT = 1, LON = 2))),
                     list(list(l1 = data.frame(LAT = 1, LON = 2), 
                               l2 = data.frame(LAT = 1, LON = 2)),
                         list(l1 = data.frame(LAT = 1, LON = 2), 
                              l2 = data.frame(LAT = 1, LON = 2))))

我的目标是得到:

rbind(datalistpairs[[1]][[1]][[1]],datalistpairs[[1]][[2]][[1]]) 

希望这可以帮助。

标签: rlistrbind

解决方案


用于map()提取每个子列表的第一个元素。

library(purrr)

datalistpairs[[1]] %>% map_dfr(~ .[[1]])

#   LAT LON
# 1   1   2
# 2   1   2

相应的基础 R 解决方案:

do.call(rbind, lapply(datalistpairs[[1]], `[[`, 1))

编辑:如何适用于datalistpairs[[i]]i = 1, 2, 3, ..., n

lapply(1:n, function(i){
  do.call(rbind, lapply(datalistpairs[[i]], `[[`, 1))
})

推荐阅读