我需要合并很多data.frames。在重现错误的代码示例下面。它看起来像一个错误。合并data.frames导致match.names错误
此代码工作得很好:
df1 <- data.frame(v=1:10, v2=rev(1:10))
df2 <- data.frame(vv=1:8, v2=rev(5:12))
df12 <- merge(x=df1, y=df2, by.x=1, by.y=1, all=TRUE, suffixes=c(".x", ".y"))
df3 <- data.frame(w=2:6, v2=3:7)
df123 <- merge(x=df12, y=df3, by.x=1, by.y=1, all=TRUE, suffixes=c(".x", ".y"))
df4 <- data.frame(x=1:6, v2=1:6)
df1234 <- merge(x=df123, y=df4, by.x=1, by.y=1, all=TRUE, suffixes=c(".x", ".y"))
此代码产生的最后一行的错误信息:错误match.names(clabs,姓名(十一)):名不以前的名称相匹配。唯一的变化是,nrow(DF4)> nrow(df123)
df1 <- data.frame(v=1:10, v2=rev(1:10))
df2 <- data.frame(vv=1:8, v2=rev(5:12))
df12 <- merge(x=df1, y=df2, by.x=1, by.y=1, all=TRUE, suffixes=c(".x", ".y"))
df3 <- data.frame(w=2:6, v2=3:7)
df123 <- merge(x=df12, y=df3, by.x=1, by.y=1, all=TRUE, suffixes=c(".x", ".y"))
df4 <- data.frame(x=1:16, v2=1:16)
df1234 <- merge(x=df123, y=df4, by.x=1, by.y=1, all=TRUE, suffixes=c(".x", ".y"))
让我们来看看df123的列名
names(df123)
[1] "v" "v2.x" "v2.y" "v2"
然后在任意一个
names(df123)[4] <- "v3"
更改姓氏现在这行代码将正常工作
df1234 <- merge(x=df123, y=df4, by.x=1, by.y=1, all=TRUE, suffixes=c(".x", ".y"))
这是错误吗?我在Win7上使用R 2.13.1。 如果您需要其他信息,我会将其添加到问题中。
是的,这看起来像一个真正的bug。这可能必须发送到R列表服务器。尽管如此,我们应该尝试在merge.data.frame中找到相关的行。 – nograpes 2012-01-17 18:12:38
我得到了与R 2.14.1相同的行为。我也可以确认错误发生在'nrow(df4)'变得大于'nrow(df123)';与'df4 < - data.frame(x = 1:10,v2 = 1:10)'一起工作,用'df4 < - data.frame(x = 1:11,v2 = 1:11)报错。我想象这个问题与它的作用有关:名称(df1234)给出了[1]“v”“v2.x”“v2.y”“v2.x”“v2.y”'。有重复的列名不应该发生良好构建的数据帧。错误是从'ribnd(x,ya)'抛出的(从'backtrace()'可以看到)。 – 2012-01-17 19:32:14
感谢您的澄清! – DrDom 2012-01-17 20:49:57