将dplyr函数应用于许多文件

时间:2017-02-04 00:26:09

标签: r csv dplyr

我想通过csv文件目录循环一个dplyr函数。我知道如何为单个文件实现命令,但是为整个目录执行此操作以加快进程是有帮助的,并且创建一个输出文件,其中包含应用该函数的每个文件的汇总数据。

基本上,每个csv文件都包含有关在社区,多个寄主植物和年份中采样的物种的信息。我想总结一下宿主植物和一年采样的独特分类群的数量。我可以使用:

taxa <- file %>% group_by(crop, year) %>% summarise(num_taxa=n_distinct(taxon))

在这里查看一些示例时,我知道如何读取文件列表并使用lapply设置函数应用程序。但是,我实际上很难嵌入一个工作函数并创建一个包含所有文件摘要数据的输出文件。任何提示将非常感谢。

1 个答案:

答案 0 :(得分:-2)

我使用purrr::map()而非dplyr::do()执行此类操作,因为map方法将取代do someday

library(tidyverse) #for dplyr, readr and purrr

summary <- map2_df(
  list_of_files,
  names(list_of_files),
  ~ read_csv(.x) %>% 
        group_by(crop, year) %>% 
        summarise(num_taxa = n_distinct(taxon)) %>%  
        mutate(id = .y))

write_csv(summary, name_of_output_file)

这会通过将dplyr链映射到list_of_files.x)和names(list_of_files).y)来创建摘要。然后它将它们绑定在一起,并将所有文件的摘要交给一个数据帧,并使用方便的id列进行调试。第二行将输出写入csv。