如何根据 R 中的某些模式导入大量数据集

How to import a lot of datasets based on some patterns in R

我有很多数据集(超过 20 个)要导入,我想同时导入它们

所有数据集的名称开头为:SearchResults,如:

SearchResults_2014_S1_2.csv
SearchResults_2014_S1.csv
SearchResults_2015_S1.csv
SearchResults_2015_S2.csv

所有数据集都具有相同顺序的相同列名。

我想在一行代码中全部导入它们然后绑定它们。

我试图将整个示例放在一起,因为这里的信息非常稀缺。

第一步,加载一些数据:

library(tidyverse)

c("SearchResults_2014_S1_2.csv",
  "SearchResults_2014_S1.csv",
  "SearchResults_2015_S1.csv",
  "SearchResults_2015_S2.csv") %>% 
  walk(~
         iris %>% 
         sample_n(replace = TRUE,
                  size = nrow(iris) * 
                    # sample(c(2,3,4), size = 1)) %>%
                    runif(1, 1, 4)) %>%
         readr::write_excel_csv2(., file = fs::path(fs::path_temp(), .x)) %>% 
         print())
#'
fs::dir_ls(fs::path_temp())

现在临时目录有一些有效的数据文件,但是 我们想让它有点挑战性,所以让我们保存一些其他文件 在同一目录中:

replicate(25,  fs::file_temp() %>% 
            write.csv(x = list()))

再看一遍临时目录下的文件:

fs::dir_ls(fs::path_temp())

最后,让我们阅读名称中包含SearchResults的文件:

fs::dir_ls(
  path = tempdir(), 
  glob = "*SearchResults_*.csv",
  type = "file"
) %>% {
  tibble(path = ., 
            data = map(., . %>% 
                       read_csv2(show_col_types = FALSE))) 
} -> all_files

此时,您已将文件放在 data 变量中。 运行 spec() 看它们的解析是否都顺利。 最好在上面的阅读代码中设置col_types,这样 您确定读入正确。

最后,unnest整理所有加载的数据集。 加上一个名为 path 的字段,它只是文件名,以找出 这些行来自哪里(如果那里有另一条信息)。

all_files %>% 
  mutate(path = fs::path_file(path)) %>% 
  unnest(data)