2013-03-20 2 views
2

У меня есть несколько CSV-файлов с 4-мя символами в их именах. Я хочу знать, как я могу связать файлы с тем же общим символом. Например, «AM-25» является общим для имени 3 csv-файлов и «BA-35» на имя другого 2.Импортировать и переписывать несколько файлов csv с общим именем в R

Файлы похожие на 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=",")) 

Это rbind вместе матриц, считываемых из файлов CSV, которые содержат символы «AM-25». Аргументы для read.table могут быть разными, в зависимости от ваших файлов csv.


EDIT

Я надеюсь, что это работает в том случае, вы не знаете, все возможные пять букв префиксы имен файлов в каталоге:

##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, и я не могу предоставить какой-либо конкретный термин в разделе «шаблон». –

+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

+0

Да, я имею дело с несколькими файлами csv с этим форматом, так что я ищу способ перекодировать все файлы, которые имеют общий символ в своих именах. как тот, который вы предложили с помощью «AM-25». Но это так много файлов, которые я не могу предоставить аргумент «pattern» вручную. –

Смежные вопросы