读取 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 %&gt;% split(.$group) %&gt;% map(~map_df(.x$file_name, read.csv, .id = 'group')) 也许更整洁,嵌套而不是分裂:library(tidyverse); df %&gt;% group_by(group) %&gt;% summarise(file_name = list(file_name)) %&gt;% 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 文件以根据分组变量分隔数据帧的主要内容,如果未能解决你的问题,请参考以下文章

从单个csv文件中读取两个完整的不同数据帧

是否可以以相同或不同的顺序将具有相同标题或标题子集的多个 csv 文件读取到 spark 数据帧中?

读取R中的CSV作为数据帧

iOS-解析读取CSV文件,解析excel文件

jmeter能不能随机读取csv文件中的参数?

转换为 csv 文件后读取数据帧会在 Scala 中呈现不正确的数据帧