2013-03-20 49 views
2

我有多個CSV文件,其名稱中包含4個常用字符。 我想知道如何使用相同的公用字符對文件進行綁定。例如,「AM-25」通常以3個csv文件命名,「BA-35」命名爲另一個2.在R中導入並打開多個帶有公用名稱的csv文件

這些文件是這樣的 AM-25.myfiles.2000.csv,AM -25.myfiles.2001.csv,AM-25.myfiles.2002.csv,BA-35.myfiles.2000.csv, BA-35.myfiles.2001.csv, 我用它讀取所有文件:

files <- list.files(path=".", pattern="xyz+.csv", all.files = FALSE,full.names=TRUE) 

回答

4

你找這樣的事情嗎?

do.call(rbind, lapply(list.files(path=".", pattern="AM-25"), read.table, header=TRUE, sep=",")) 

這會將包含字符「AM-25」的csv文件中讀取的矩陣混合在一起。 read.table的參數可能會有所不同,具體取決於您的csv文件。


編輯

我希望這個工程,你不知道在你的目錄文件名的所有可能的五個字母前綴的情況:

##Get all different first five letter strings for all cvs files in directory "."                                               
file.prefixes <- unique(sapply(list.files(path=".", pattern="*.csv"), substr, 1,5)) 

##Group all matching file names according to file.prefixes into a list                                                  
file.list <- lapply(file.prefixes, function(x)list.files(pattern=paste("^",x,".*.csv",sep=""), path=".")) 
names(file.list) <- file.prefixes ##just for convenience                                                     

##parse all csv files in file.list, create a list of lists containing all tables for each prefix                                           
tables <- lapply(file.list, function(filenames)lapply(filenames, function(file)read.table(file, header=TRUE))) 

##for each prefix, rbind the tables. Result is a list of length being length(file.prefixes)                                             
## each containing a matrix with the combined data parsed from the files that match the prefix                                            
joined.tables <- lapply(tables, function(t)do.call(rbind, t)) 

##Save tables to files                                                              
for (prefix in names(joined.tables))write.table(joined.tables[[prefix]], paste(prefix, ".csv", sep="")) 
+0

由於這樣的作品,但有什麼方法可以在「模式」部分的文件名中使用拳頭5個字符?我有多個csv文件,我無法在「模式」部分提供任何特定的術語。 – 2013-03-20 18:16:50

+0

你的意思是說,包含例如子字符串「AM-25」**的非文件名**在開始時不匹配? list.files(path =「。」,pattern =「^ AM-25」)將匹配文件「AM-25.myfiles.2000.csv」「AM-25.myfiles.2001.csv」和「AM-25 .myfiles.2002.csv「而不是文件」otherfile_AM-25.myfiles.2000.csv「。你是這個意思嗎? – user1981275 2013-03-21 10:57:00

+0

是的,我正在處理這種格式的幾個CSV文件,所以我正在尋找方法來破解名稱中具有共同特徵的所有文件。就像你用「AM-25」建議的那樣。但是這些文件太多,我無法手動提供「模式」參數。 – 2013-03-21 16:06:17