У меня есть список из многих data.frames, которые я хочу Проблема в том, что каждый data.frame отличается количеством строк и столбцов, но все они имеют общие ключевые переменные (которые я назвал "var1"
и " var2 "
в приведенном ниже коде). Если бы data.frames были идентичны с точки зрения столбцов, я мог бы просто rbind
, для которого plyr rbind.fill справился бы с задачей , но с этими данными дело обстоит не так.
Поскольку команда merge
работает только с 2 кадрами данных, я обратился в Интернет за идеями. Я получил это из здесь ], которая отлично работала в R 2.7.2, что у меня было в то время:
merge.rec <- function(.list, ...){
if(length(.list)==1) return(.list[[1]])
Recall(c(list(merge(.list[[1]], .list[[2]], ...)), .list[-(1:2)]), ...)
}
И я бы назвал функцию так:
df <- merge.rec(my.list, by.x = c("var1", "var2"),
by.y = c("var1", "var2"), all = T, suffixes=c("", ""))
Но в любой версии R после 2.7.2, включая 2.11 и 2.12, этот код не работает со следующей ошибкой:
Error in match.names(clabs, names(xi)) :
names do not match previous names
(Между прочим, я вижу другие ссылки на эту ошибку в другом месте без разрешения).
Есть ли способ решить эту проблему?
Когда у Вас есть список DFS, и столбец содержит "идентификатор", но в некоторых списках, отсутствуют некоторые идентификаторы, тогда можно использовать эту версию, Уменьшают / Слияние для присоединения к нескольким DFS недостающего Ids строки или маркировок:
Reduce(function(x, y) merge(x=x, y=y, by="V1", all.x=T, all.y=T), list_of_dfs)