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

Posted

技术标签:

【中文标题】如何根据 R 中的某些模式导入大量数据集【英文标题】:How to import a lot of datasets based on some patterns in R 【发布时间】:2021-12-22 22:42:00 【问题描述】:

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

所有数据集的名称都以:SearchResults 开头,例如:

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

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

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

【问题讨论】:

data.table::rbindlist(lapply(list.files(...), data.table::fread(), ...), ...) , ... = 函数的参数 我在哪里指出只应导入名称以SearchResults 开头的数据集? pattern-函数的list.files()-参数中...请参阅上面评论中提到的函数的帮助文件。提示:pattern = "^Searchresults.*\\.csv$" 【参考方案1】:

我试图整理一个完整的例子,因为这里的信息非常稀缺。

第一步,加载一些数据:

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)

【讨论】:

我花了一些时间回复消息,因为我还没有到必须导入名称以相同字符开头的所有数据库的阶段。这段代码简直是奇迹@Mossa

以上是关于如何根据 R 中的某些模式导入大量数据集的主要内容,如果未能解决你的问题,请参考以下文章

R中向具有大量数据集的数据框添加新列的有效方法

PostgreSQL数据库导入大量数据时如何优化

PostgreSQL数据库导入大量数据时如何优化

PostgreSQL数据库导入大量数据时如何优化

在 R 中组合大量数据集的更快方法?

将大量数据集从 SQL 服务器导入 HDF5