【问题标题】:rbind error: "names do not match previous names"rbind 错误:“名称与以前的名称不匹配”
【发布时间】:2012-08-14 17:00:59
【问题描述】:

作为一个更大问题的一部分(在多边形 ID 相同的情况下将 ,makeUniqueIDs 参数添加到 rbind.SpatialPolygonsDataFrame),我遇到了来自 rbind 的这条奇怪消息:

> do.call("rbind",xd.small)
Error in match.names(clabs, names(xi)) : 
  names do not match previous names

我能找到的唯一其他信息是 this question,这让我相信 rbind 也是问题的根源。

我当然可以编写自己的类似 rbind 的函数,但想必这个match.names 检查是有原因的,我很好奇它是什么。

【问题讨论】:

    标签: r sp


    【解决方案1】:

    第一个数据框的名称(列名)与第二个数据框的名称不匹配。正如错误消息所说。

    > identical(names(xd.small[[1]]), names(xd.small[[2]]) )
    [1] FALSE
    

    如果您不关心第二个df的第3或第4列的名称,您可以强制它们相同:

    > names(xd.small[[1]]) <- names(xd.small[[2]]) 
    > identical(names(xd.small[[1]]), names(xd.small[[2]]) )
    [1] TRUE
    

    那么事情应该会顺利进行。

    【讨论】:

    • 哦。我用lapply(xd,names) 肉眼检查了它们,但没有注意到数字不同。
    • 也许gtools 包中的smartbind 可能有用。
    • @TylerRinker 这是一个很酷的功能。我会把它归档以备将来使用,但为此我宁愿留在 base R 上。
    • 我第一次看的时候也没有注意到细微的差别,我想知道过去的输入中是否有一些非打印字符。
    • rbind.fill from plyr 比 smartbind 快
    【解决方案2】:

    很容易使用unname()函数:

    data.frame <- unname(data.frame)
    

    【讨论】:

    • 我相信 rbind() 实际上需要列有名称。 rbind(unname(df[, 1:2]), unname(df[, 3:4])) 导致我出现 Error in if (facCol[jj]) { : missing value where TRUE/FALSE needed 错误。
    【解决方案3】:

    rbind() 需要两个对象名称相同。例如第一个对象名称:ID Age,下一个对象名称:ID Gender,如果要使用rbind(),会打印出来:

    名字与以前的名字不匹配

    【讨论】:

      【解决方案4】:

      使用代码如下:

      mylist <- lapply(pressure, function(i)read.xlsx(i,colNames = FALSE))#
      mydata <- do.call('rbind',mylist)#
      

      【讨论】:

        猜你喜欢
        • 2021-02-12
        • 1970-01-01
        • 1970-01-01
        • 2023-02-15
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多