r - 如何使我的函数导入并连接/合并文件夹中的“所有”文件?
问题描述
由于....限制,我被迫一次将我的数据手动下载到一个 csv 文件中。直到现在,这还不是问题。我已将所有文件保存在同一个文件夹中,因此我可以使用一个函数,只需将它们合并(所有列名完全相同)。
但是,我最近必须下载比以前更多的数据。我目前正在尝试同时导入/连接 513 个 csv 文件,看来我的功能已达到某种限制。不再导入所有 csv 文件,这当然是非常令人不安的。
我试图将未导入的文件(连同成功导入的文件)移动到另一个文件夹,我可以很好地导入/连接这些文件。这似乎与文件本身没有任何关系,而是与同时导入/连接的数量庞大。
有没有办法无限制地导入和连接文件夹中的“所有”文件?
每个 csv 文件的前 4 行和后 4 行包含元数据,需要忽略。到目前为止,我一直在使用以下循环来导入/连接我的文件:
setwd("path")
file_list<-list.files("path")
for (file in file_list){
# if the merged dataset doesn't exist, create it
if (!exists("dataset")){
dataset <- head(read_delim(file, delim=';',na="",skip=4),-4)
}
# if the merged dataset does exist, append to it
if (exists("dataset")){
temp_dataset <-head(read_delim(file, delim=';',na="",skip=4),-4)
dataset<-rbind(dataset, temp_dataset)
rm(temp_dataset)
}
}
解决方案
在基础R
中,您将使用do.call(rbind, list_data)
. 使用data.table
,您可以使用data.table::rbindlist
它会更有效率。
data.table
library(data.table)
setwd("path")
file_list<-list.files("path")
list_data <- lapply(file_list, function(file) head(fread(file, delim=';',na="",skip=4),-4))
df <- rbindlist(list_data, fill = TRUE, use.names = TRUE)
fill = TRUE
为了安全起见,我添加了参数use.names = TRUE
:您在这里失去了一点效率,但您确定您在应该在的位置 rbind 列。
碱基R
setwd("path")
file_list<-list.files("path")
list_data <- lapply(file_list, function(file) head(read_delim(file, sep=';',na.strings = "", skip=4),-4))
df <- do.call(rbind, list_data)
推荐阅读
- c++ - 如何使用 C++ 在 Windows 中检测 RDP 会话显示模式和使用的协议(TCP/UDP)
- javascript - javascript如何跳过为方法传递参数?
- html - 多个手风琴(首先默认打开+打开另一个手风琴时自动关闭)
- javascript - 有什么办法破解 react-router-Dom 私有路由?
- python - PYTHON 为什么我的 python IDLE 不能将 numpy 识别为模块,尽管在 cmd 中运行 pythob 时可以正常使用 numpy?
- javascript - 如何正确将 scss 文件导入 VueJS 项目
- ruby-on-rails - Sidekiq 6 仅在我进入 Web 控制台时进行轮询
- r - 如何重新排序 heatmap.2 中的列
- django - 在 Django 中发出 ajax 发布请求时未调用服务器
- javascript - 第二个ajax请求不应该等到第一个完成它的执行