【发布时间】:2011-12-26 20:07:33
【问题描述】:
我有许多要合并的 data.frames 的列表。这里的问题是每个 data.frame 在行数和列数方面都不同,但它们都共享关键变量(我在下面的代码中称为 "var1" 和 "var2")。如果 data.frames 在列方面相同,我只能rbind,plyr 的rbind.fill 可以完成这项工作,但这些数据并非如此。
因为merge 命令仅适用于 2 个 data.frames,所以我转向互联网寻求灵感。我从here 得到了这个,它在 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("", ""))
但是在 2.7.2 之后的任何 R 版本中,包括 2.11 和 2.12,此代码都会失败并出现以下错误:
Error in match.names(clabs, names(xi)) :
names do not match previous names
(顺便说一句,我看到其他引用此错误elsewhere 没有解决方案)。
有没有办法解决这个问题?
【问题讨论】:
标签: r list merge dataframe r-faq