Объединение больших файлов данных с разными столбцами в один большой файл - PullRequest
0 голосов
/ 12 июня 2019

У меня есть 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)

, но это не удается из-за ошибки памяти, когда данные слишком велики.

Каков наилучший способ сделать это?

Я думаю, что лучшим способом будет сначала пройти по всем файлам, чтобы собрать имена столбцов, затем пройти по файлам, чтобы поместить их в правильный формат, и записать их на диск по мере их появления.Однако, возможно, уже есть какой-то код, который выполняет это?

...