2016-08-29 3 views
1

У меня есть несколько файлов в одном dirctory: я перечислить их все с помощью:Как объединить два файла в R?

dir1<- list.files ("/data/", "*.txt", full.names = TRUE) 
    Gh_12_kj.txt 
    kh_12_k.txt 
    Gh_13_kj.txt 
    kh_13_k.txt 

Я могу читать их один за другим, как это:

for (i in seq_along(dir1)) {file =read.table(i) ……} 

Я хочу, чтобы объединить все файлы с одинаковыми именами но разные номера, например:

Rbind Gh_12_kj.txt and Gh_13_kj.txt 
    Rbind s_13_f.txt and s_12_f.txt  and so on for all files in this dirctory 

Я думаю, нам нужно unique, но не сюр, как

+1

Вы имели в виду, что это не похоже? – akrun

ответ

1

В качестве объекта «dir1» был создан с full.names = TRUE вариант из list.files, мы можем извлечь имя файла с basename и file_path_sans_ext (от tools), затем split «dir1» по подстроке, т.е. «файлы» только хранение «Ghkj_df», «khf_df» и т. д. в «Gh_12_kj_df.txt», «kh_13_f_df.txt»), проведите через вложенные элементы list с lapply, затем снова запустите и прочитайте файлы с помощью fread и запишите их вместе с rbindlist.

library(data.table) 
library(tools) 
files <- file_path_sans_ext(basename(dir1)) 
lapply(split(dir1, sub("^([^_]+)_\\d+_([^.]+)", "\\1\\2", files)), 
          function(x) rbindlist(lapply(x, fread))) 
+0

@bicton Непонятно об ошибке. Что вы получаете с 'split (dir1, sub (" _. * "," ", Files)) – akrun

+0

@bicton На основе вашего описания в сообщении эти файлы сгруппированы togher и' rbind'ed, и это то, что код делает. то есть 'v1 <- c (" Gh_12_kj.txt "," kh_12_k.txt "," Gh_13_kj.txt "," kh_13_k.txt "); split (v1, sub ("_. *", "", v1)) ' – akrun

+0

@bicton Да, используя' sub', мы извлекаем только часть 'kh' или' Gh', и поэтому мы получаем ' Gh' записывает все как элемент списка, так же как «kh» как другой, затем мы прокручиваем каждый из вложенных элементов и читаем его с помощью 'fread',' rbind' it together – akrun