rbind data.frames в списке в R - PullRequest
1 голос
/ 19 мая 2019

Предположим, у нас есть 3 list с data.frame с.В BASE R мне было интересно, как я могу автоматически (например, в циклической структуре) rbind data.frame s в этих 3 списках?

Обратите внимание, я хочу, чтобы циклическая структура позволяла 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 ]

1 голос
/ 20 мая 2019

Вот вариант с 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))
0 голосов
/ 20 мая 2019

РЕДАКТИРОВАТЬ: Извините, я упустил из виду, что вы хотите решить эту проблему в 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
...