У меня есть N файлов, разделенных табуляцией.Каждый файл имеет строку заголовка с указанием имен столбцов.Некоторые из столбцов являются общими для всех файлов, но некоторые являются уникальными.
Я хочу объединить все файлы в один большой файл, содержащий все соответствующие заголовки.
Пример:
> cat file1.dat
a b c
5 7 2
3 9 1
> cat file2.dat
a b e f
2 9 8 3
2 8 3 3
1 0 3 2
> cat file3.dat
a c d g
1 1 5 2
> merge file*.dat
a b c d e f g
5 7 2 - - - -
3 9 1 - - - -
2 9 - - 8 3 -
2 8 - - 3 3 -
1 0 - - 3 2 -
1 - 1 5 - - 2
-
может быть заменен на что угодно, например NA
.
Предостережение : файлы настолько велики, что я не могу загрузить их все в память одновременно.
У меня было решение в R с использованием
write.table(do.call(plyr:::rbind.fill,
Map(function(filename)
read.table(filename, header=1, check.names=0),
filename=list.files('.'))),
'merged.dat', quote=FALSE, sep='\t', row.names=FALSE)
, но это не удается из-за ошибки памяти, когда данные слишком велики.
Каков наилучший способ сделать это?
Я думаю, что лучшим способом будет сначала пройти по всем файлам, чтобы собрать имена столбцов, затем пройти по файлам, чтобы поместить их в правильный формат, и записать их на диск по мере их появления.Однако, возможно, уже есть какой-то код, который выполняет это?