使用purrr :: flatten_dfr

时间:2018-11-18 12:16:50

标签: r list purrr flatten

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 :(得分:1)

尝试:

library(tidyverse)

df <- bind_rows(test_list)

我不确定您是否可以使用flatten_dfr解决此问题。

例如,即使所有数据帧的长度相同,flatten_dfr也会返回其中一个。

如果列名不同且长度相同,则flatten_dfr将绑定名称完全不同的列,因此模仿了bind_cols的行为。

也许其他人有一个flatten_dfr的特定用例,但我认为最终您将使用bind_rowsbind_cols