使用 purrr::flatten_dfr 将数据帧列表展平为一个数据帧
Flattening a list of data frames into one data frame with purrr::flatten_dfr
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 列表,但我只想知道为什么此选项不起作用。
尝试:
library(tidyverse)
df <- bind_rows(test_list)
我不确定 flatten_dfr
是否有解决此问题的方法。
例如,即使所有数据帧的长度都相同,flatten_dfr
也只是其中一个 return。
如果列名不同但长度相同,flatten_dfr
将绑定名称完全不同的列,因此模仿 bind_cols
.
的行为
也许其他人有 flatten_dfr
的特定用例,但我认为您最终会使用的是 bind_rows
或 bind_cols
。
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 列表,但我只想知道为什么此选项不起作用。
尝试:
library(tidyverse)
df <- bind_rows(test_list)
我不确定 flatten_dfr
是否有解决此问题的方法。
例如,即使所有数据帧的长度都相同,flatten_dfr
也只是其中一个 return。
如果列名不同但长度相同,flatten_dfr
将绑定名称完全不同的列,因此模仿 bind_cols
.
也许其他人有 flatten_dfr
的特定用例,但我认为您最终会使用的是 bind_rows
或 bind_cols
。