2015-09-21 2 views
1

У меня есть две папки с файлами с одинаковыми именами. например, - FOLDER1 имеет a.csv, b.csv, c.csv и аналогично FOLDER2 имеет a.csv, b.csv, c.csvОбъединение файлов с таким же именем в r и их запись в разные файлы в R

файлы имеют различное количество строк, но одинаковое число и имя столбцов

Я хочу объединить файлы с тем же именем и записать их в файлы с именем a.csv, b.csv c.csv.

Это всего лишь пример, и я хочу сделать это за 800-1000 файлов.

я попытался

filenames <- list.files(c(filePathNew,filePath), pattern="*.csv", full.names=TRUE)  

имеет все имена из двух папок

lst1 <- lapply(split(filenames, basename(filenames)),function(x) do.call(rbind, 
lapply(x,function(y) read.csv(y, header = TRUE, stringsAsFactors = FALSE, sep = "")))) 

lapply(seq_along(lst1), function(i) write.csv(lst1[[i]], paste(filepath,names(lst1)[i], sep = "/"), row.names = FALSE, 
         quote = FALSE)) 

но он показывает следующее сообщение об ошибке

Error in rbind(deparse.level, ...) : 
    numbers of columns of arguments do not match 
Called from: stop("numbers of columns of arguments do not match") 
+1

Что вы уже пробовали? Почему это не сработало? – Heroka

+0

Пожалуйста, просмотрите отредактированный вопрос –

+0

Из сообщения об ошибке кажется, что хотя бы одна из пар файлов не совпадает с количеством столбцов. Попробуйте добавить оператор 'print', чтобы распечатать пару файлов перед' do.call', чтобы увидеть, где это происходит. – user295691

ответ

0

Изменено Опять

Как вы уже указали у вас есть Windows, вы можете использовать что-то вроде этого сохраняется как CONCAT.BAT

CD FOLDER1 
MKDIR COMBINED 
FOR %%G IN (*.CSV) DO COPY "%%G"+FOLDER2\"%%G" COMBINED\"%%G" 

Затем сделайте

system("CONCAT.BAT", intern=FALSE) 

Обновленный ответ

Как вы больше файлов, чем 3 изначально вы предложили, вы можете использовать сценарий под названием concat следующим образом:

#!/bin/bash 
cd FOLDER1 
for f in *.csv; do cat "$f" FOLDER2/"$f" > "combined${f}"; done 

и сделать его исполняемым и запустить его с

system("chmod +x concat; ./concat", intern=FALSE) 

оригинальный ответ

Если на Unix/Linux, попробуйте:

system("cat FOLDER1/a.csv FOLDER2/a.csv > aCombined.csv", intern=FALSE) 

Если на Windows, попробуйте:

system("copy FOLDER1\a.csv+FOLDER2\a.csv aCombined.csv", intern=FALSE) 
+0

Я хочу сделать это для большого количества файлов. есть ли другой способ? –

+0

Какая ОС вы используете? –

+0

Я использую окна –

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