读取 csv 文件以根据分组变量分隔数据帧
Posted
技术标签:
【中文标题】读取 csv 文件以根据分组变量分隔数据帧【英文标题】:Read csv files to separate dataframes based on a grouping variable 【发布时间】:2017-05-11 19:50:03 【问题描述】:给定 20k 个 csv 文件,以及定义 csv 文件包含的数据组和 csv 文件的文件名的 tibble:
df <- tibble(
group = c("group_1", "group_1", "group_2", "group_3"),
file_name = c("file_1.csv", "file_2.csv", "file_3.csv", "file_4.csv")
)
我需要导入 csv 文件并 rbind 到数据帧,但每个组需要一个单独的数据帧
这些文件可能没有相同的列,因此如果您只是导入所有文件并在第 1 步绑定,那么稍后会删除一些列。所以理想情况下,我需要一个从组开始,读取相关文件,绑定行,然后输出为与组命名相同的数据帧的过程。
我可以使用 lapply、read.csv 和 bind_rows 导入 csv 文件,但我似乎无法根据有多少组来概括该过程。
最好使用基于 lapply 或 purrr 的解决方案。
干杯
【问题讨论】:
发出咕噜声,可能类似于df %>% split(.$group) %>% map(~map_df(.x$file_name, read.csv, .id = 'group'))
也许更整洁,嵌套而不是分裂:library(tidyverse); df %>% group_by(group) %>% summarise(file_name = list(file_name)) %>% mutate(data = map(file_name, ~map_df(.x, read_csv, .id = 'file')))
【参考方案1】:
试试:
dff <- tibble(
group = c("group_1", "group_1", "group_2", "group_3"),
file_name = c("file_1.csv", "file_2.csv", "file_3.csv", "file_4.csv")
)
lapply(split(dff, dff$group), function(x)
do.call(rbind, lapply(x$file_name, read.csv))
)
我希望这会有所帮助。
【讨论】:
以上是关于读取 csv 文件以根据分组变量分隔数据帧的主要内容,如果未能解决你的问题,请参考以下文章