зацикливание rbind для списков данных - PullRequest
0 голосов
/ 12 июня 2018

У меня есть 3 списка (dataset1, dataset2, dataset3), и каждый список содержит несколько разных фреймов данных.Однако в каждом списке порядок кадров данных одинаков (т.е. первый кадр данных в списке 1, списке 2 и списке 3 имеет одинаковые заголовки и аналогично для второго, третьего, четвертого кадров данных и т. Д.)

Я думал о создании цикла, объединяющего 3 списка фреймов данных в 1 список фреймов данных.Поскольку все кадры данных находятся в одинаковом порядке во всех списках, я попытался использовать следующий код:

library(purr)
combined_data <- pmap(dataset1,
                      dataset2,
                      dataset3,
                      ~rbind(..1,..2,..3))

Вместо этого R вернул ошибку «Ошибка: элемент 1 имеет длину 51, а не 1 или 90."

Я выполнил проверку, и все первые кадры данных во всех 3 наборах данных - это" Список из 51 ", в то время как все третьи кадры данных во всех 3 наборах данных - это" Список из 90 ".

Однако, когда я запустил следующий код:

combined_data <- map2(dataset1,
                      dataset2,
                      ~rbind(.x,.y))
combined_data <- map2(combined_data,
                      dataset3,
                      ~rbind(.x,.y))

Он работает именно так, как я хотел.Следовательно, я хотел бы узнать из своей ошибки, есть ли что-то не так с моим кодом, когда я использовал pmap, тем более, что в будущем мне придется часто делать это в нескольких списках, и использование map2 не будет таким устойчивым.Спасибо всем!

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Мы могли бы использовать

pmap(list(dataset1, dataset2, dataset3), ~ rbind(...) %>%
                                               as.data.frame)
0 голосов
/ 12 июня 2018

Вы можете использовать purrr::transpose для переключения уровней вашего списка.Это приведет к размещению первого data.frame из каждого списка в их собственном списке, второго data.frame в каждом списке в свой собственный список и т. Д.

Тогда вы можете просто использовать purrr::mapи dplyr::bind_rows чтобы присоединиться к data.frames нового списка.

library(tidyverse)
transpose(list(dataset1, dataset2, dataset3)) %>%
   map(bind_rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...