Сведение списка фреймов данных в один фрейм данных с помощью purrr :: flatten_dfr - PullRequest
0 голосов
/ 18 ноября 2018
library(tidyverse)

test_list <- list(a = data.frame("fruits" = fruit[1:10],
                                 "letters" = letters[1:10],
                                 "numbers" = rnorm(10)),
                  b = data.frame("fruits" = fruit[1:12],
                                 "letters" = letters[1:12],
                                 "numbers" = rnorm(12)),
                  c = data.frame("fruits" = fruit[1:7],
                                 "letters" = letters[1:7],
                                 "numbers" = rnorm(7)),
                  d = data.frame("fruits" = fruit[1:12],
                                 "letters" = letters[1:12],
                                 "numbers" = rpois(12, 2)))

У меня есть список фреймов данных с одинаковой структурой столбцов, но с разным количеством строк в каждом df.Я просто хочу объединить их в один фрейм данных.Я подумал, что мог бы просто использовать что-то вроде purrr::flatten_dfr():

flatteneddf <- flatten_dfr(test_list)

Однако это вызывает проблему с длиной строки каждого df:

Error in bind_rows_(x, .id) : Argument 4 must be length 10, not 12

Я знаю, что существует множество других опций, чтобы сгладить список dfs, но я просто хочу знать, почему эта опция не работает.

1 Ответ

0 голосов
/ 18 ноября 2018

Попробуйте:

library(tidyverse)

df <- bind_rows(test_list)

Я не уверен, что есть способ, которым вы можете решить это с помощью flatten_dfr.

Например, даже если у вас одинаковая длина всех фреймов данных, flatten_dfr просто вернет один из них.

Если имена столбцов будут отличаться и иметь одинаковую длину, flatten_dfr будет связывать имена с совершенно разными именами, следовательно, имитируя поведение bind_cols.

Возможно, у кого-то есть конкретный вариант использования для flatten_dfr, но я думаю, что в итоге вы будете использовать либо bind_rows, либо bind_cols.

...