【问题标题】:How to rbind sublists in R如何在 R 中绑定子列表
【发布时间】:2020-08-30 21:18:04
【问题描述】:

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

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

希望这会有所帮助。

【问题讨论】:

  • 请提供minimal reproducible data 供我们测试输出。
  • t(sapply(datalistpairs[[1]], "[[", 1))?
  • @jay.sf 这和我的回答一样。但是你的输出是一个矩阵。如果真实数据有其他字符列,你的方法很难进一步操作。
  • @DarrenTsai 抱歉,我的评论并没有冒犯任何人的意思。

标签: r list rbind


【解决方案1】:

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

library(purrr)

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

#   LAT LON
# 1   1   2
# 2   1   2

对应的base R解:

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

编辑:如何应用到datalistpairs[[i]] where i = 1, 2, 3, ..., n

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

【讨论】:

  • 谢谢达伦。您的解决方案非常优雅。在某种程度上,您的解决方案如何最好地应用于 datalistpairs[[i]] 其中 i = 1, 2, 3, .... n?一样的想法?
  • 太棒了!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 2023-03-29
相关资源
最近更新 更多