我想通过csv文件目录循环dplyr函数。我知道如何为单个文件实现命令,但对整个目录执行此操作以加快该过程以及创建一个输出文件,其中包含应用函数的每个文件的汇总数据会很有帮助。
从本质上讲,每个csv文件都包含有关在群落中采样的物种的信息,跨多个寄主植物和年份。我想总结一下按寄主植物和年份采样的独特分类群的数量。我可以使用:
taxa <- file %>% group_by(crop, year) %>% summarise(num_taxa=n_distinct(taxon))
在查看此处的一些示例时,我知道如何读取文件列表并使用 lapply 设置函数应用程序。但是,我很难实际嵌入一个工作函数并创建一个包含所有文件的摘要数据的输出文件。任何提示将不胜感激。
我使用purrr::map()
而不是dplyr::do()
做这种事情,因为map
方法总有一天会取代do
。
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。