本文首發於“生信補給站”微信公眾號,https://mp.weixin.qq.com/s/8IfMrSr9xc8_1Y2_9Ne6hg
在一個文件夾下有很多字段一致,格式統一的數據文件(csv,txt,excel),可以使用R快速的統一成一個文件方便后續分析和處理。
數據准備
將需要處理的字段一致,格式統一的數據文件(csv,txt,excel),放到文件夾內,並將此文件夾設置為工作目錄,下面分情況介紹如何批量讀取並合並數據。
1)文件夾內只有一種格式的文件:csv,txt,excel;
2)文件夾內有多種格式的文件:csv,txt,excel以及其他的png,pdf等文件;
數據處理
1 僅有一種類型文件,此處以csv示例
設定工作目錄,將需要處理的數據文件放到工作目錄下
#查看當前路徑下所有文件
a = list.files()
a

#命令構建路徑變量dir(方便更改),也可以不構建,后面示例
dir = paste("./",a,sep="")
#讀取dir長度,也就是文件夾下的文件個數
n = length(dir)
#讀入第一個文件內容
merge.data = read.csv(file = dir[1],header=T,sep=",")
#循環從第二個文件開始讀入所有文件,並組合到merge.data變量中
for (i in 2:n){
new.data = read.csv(file = dir[i], header=T, sep=",")
merge.data = rbind(merge.data,new.data)
}
#輸出組合后的文件merge.csv到input文件
write.csv(merge.data,file = "./merge_all.csv",row.names=FALSE)
2 存在多種類型文件,僅讀取csv格式文件
當工作目錄下多種類型文件時,只讀取其中一種
list.files()

#提出目錄下的所有csv文件循環導入然后合並
a = list.files(pattern = ".csv")
#不構建路徑變量,直接讀入第一個文件內容
merge.data = read.csv(a[1],header=T,sep=",")
#循環從第二個文件開始讀入所有文件,並組合到merge.data變量中
for (i in 2:n){
new.data = read.csv(a[i], header=T, sep=",")
merge.data = rbind(merge.data,new.data)
}
#輸出組合后的文件merge.csv到input文件
write.csv(merge.data,file = "./merge_only_csv.csv",row.names=FALSE)
注:因txt文件亦可以直接用R基本讀入方式讀取,更改read.table即可,此處不舉例。
3 存在多種類型文件,僅讀取excel格式文件
因R不能直接讀取excel文件,需要加載R包,個人習慣利用readxl包讀取。
#install.packages("readxl")
library(readxl)
#另一種方式提出目錄下的所有excel文件
list <- list.files()
a <- grep('\\.xlsx', list, value = TRUE)
n = length(a)
merge.data = read_excel(a[1])
#循環從第二個文件開始讀入所有文件,並組合到merge.data變量中
for (i in 2:n){
new.data = read_excel(a[i])
merge.data = rbind(merge.data,new.data)
}
#輸出組合后的文件merge.csv到input文件
write.csv(merge.data,file = "./merge_only_excel.csv",row.names=FALSE)
低時間投入成本,高效率回報🤭

