如何根据 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 中的某些模式导入大量数据集的主要内容,如果未能解决你的问题,请参考以下文章