R在R中的列表中查找data.frames

时间:2019-05-19 20:56:59

标签: r function loops dataframe rbind

假设我们有list个中的三个data.frame个。在BASE R中,我想知道如何自动(例如在循环结构中)这三个列表中的rbinddata.frame

请注意,我需要循环结构,以便它可以rbind容纳更多数量的类似列表(例如g4 g5 ...)

g1 <- list(b1 = list(data.frame(a = 1:3, b = 3:5)))
g2 <- list(b1 = list(data.frame(a = 1:3, b = 3:5)))
g3 <- list(b1 = list(data.frame(a = 1:3, b = 3:5)))

2 个答案:

答案 0 :(得分:1)

这里是base R

的一个选项
do.call(rbind, lapply(mget(ls(pattern = "^g\\d+$")), function(x) x$b1[[1]]))

或与map

library(tidyverse)
mget(ls(pattern = "^g\\d+$"))  %>% 
      map_dfr(~ pluck(., "b1") %>% 
                 extract2(1))

答案 1 :(得分:0)

编辑:抱歉,我忽略了您想在Base R中解决此问题

我不确定这是否正是您想要的,但是您可以为此使用reduce中的函数purrr

library(tidyverse)
g1 <- list(b1 = list(data.frame(a = 1:3, b = 3:5)))
g2 <- list(b1 = list(data.frame(a = 1:3, b = 3:5)))
g3 <- list(b1 = list(data.frame(a = 1:3, b = 3:5)))

reduce(list(g1,g2,g3), rbind) %>%
  as_tibble() %>%
  unnest() %>%
  unnest()

# A tibble: 9 x 2
      a     b
  <int> <int>
1     1     3
2     2     4
3     3     5
4     1     3
5     2     4
6     3     5
7     1     3
8     2     4
9     3     5