2016-11-07 3 views
-2

Предположим, у меня есть 8 таблиц. Пусть 6 столбцов одинаковы в каждой из этих таблиц, но среди этих 8 таблиц 5 из них имеют один дополнительный столбец (имя столбца которого одинаково во всех 5, а это означает, что 5 из них имеют в общей сложности 7 столбцов). Мой вопрос заключается в том, как мы будем связывать все 8 таблиц таким образом, что остальные 3 таблицы также теперь состоят из этого дополнительного столбца, который имеет другой 5. Надеюсь, вопрос совершенно ясен.Как объединить несколько CSV-файлов с разными столбцами в R?

+3

Поместите наборы данных в 'list' i.e.' lst <- list (df1, df2, ... df8); библиотека (data.table); rbindlist (lst, fill = TRUE) ' – akrun

ответ

0

Вы можете использовать rbind.fill из пакета plyr для этого:

library(plyr) 

# df_list contains a list of all the csv files you read, e.g. using lapply(list_paths, read.csv) 
df_list = list(data.frame(a = c(1,2), b = c(3,4)), 
       data.frame(a = c(4,5), b = c(6,3), c = c(20, 21))) 
> do.call('rbind.fill', df_list) 
    a b c 
1 1 3 NA 
2 2 4 NA 
3 4 6 20 
4 5 3 21 

или в качестве альтернативы, использовать rbindlist из data.table, как @akrun предложил. Это, вероятно, намного быстрее для больших наборов данных.

+0

Спасибо, Пол, но есть ли другой вариант, в котором вам не нужно вводить все и использовать только цикл или некоторые другие методы. –

+0

Я не уверен, что вы имеете в виду. Использование rbind.fill, похоже, не очень много кода. –

+0

У меня проблема решена, так как это было всего лишь из 8 таблиц, я вручную вставил отсутствующий столбец в остальные 3 таблицы, а затем объединил их. lst <- list (v1, v2, v3, v4, v5, v6, v7, v8,); vCombined <- rbindlist (lst, fill = TRUE) –

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