Импорт и привязка нескольких файлов CSV с общим именем в R

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

Файлы имеют вид 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 )

person Geo-sp    schedule 20.03.2013    source источник


Ответы (1)


Вы ищете что-то подобное?

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

Это свяжет вместе матрицы, считанные из ваших файлов csv, которые содержат символы «AM-25». Аргументы для 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=""))
person user1981275    schedule 20.03.2013
comment
Спасибо, это работает, но есть ли способ использовать первый символ 5 в имени файла в разделе шаблона? У меня есть несколько файлов csv, и я не могу указать какой-либо конкретный термин в разделе шаблонов. - person Geo-sp; 20.03.2013
comment
Вы имеете в виду, что имена файлов, которые содержат, например, подстроку AM-25 not в начале, не совпадают? 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. Это то, что вы имели ввиду? - person user1981275; 21.03.2013
comment
Да, я имею дело с несколькими CSV-файлами в этом формате, поэтому я ищу способ связать все файлы, имена которых имеют общий символ. вроде того, что вы предложили с АМ-25. Но файлов так много, что я не могу указать аргумент шаблона вручную. - person Geo-sp; 21.03.2013
comment
Чтобы быть более ясным, мне нужно что-то, чтобы искать первые 5 элементов строк в списке и связывать совпадающие. - person Geo-sp; 21.03.2013
comment
Хорошо, я думаю, что теперь я лучше понимаю вашу проблему, я не понял, что вы еще не знаете общих персонажей. Я отредактировал ответ, это работает для вас? - person user1981275; 22.03.2013
comment
Спасибо, что работает! но могу ли я сохранить эти rbinded файлы в новые csv файлы с пятибуквенными строками в качестве их имени? - person Geo-sp; 22.03.2013
comment
См. Отредактированный ответ, это должно сработать. Однако я не знаю, как выглядят ваши CSV-файлы, поэтому вам, возможно, придется настроить аргументы для write.table (и read.table). Просто посмотрите на «write.table» и «read.table». - person user1981275; 22.03.2013