69

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

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

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

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

4

4 回答 4

88

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

> 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

那么事情就应该愉快地进行了。

于 2012-08-18T14:49:04.710 回答
44

很容易使用该unname()功能:

data.frame <- unname(data.frame)
于 2014-01-16T10:51:01.153 回答
3

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

名称与以前的名称不匹配

于 2016-06-21T08:26:56.570 回答
2

使用代码如下:

mylist <- lapply(pressure, function(i)read.xlsx(i,colNames = FALSE))#
mydata <- do.call('rbind',mylist)#
于 2017-08-03T15:06:34.160 回答