作为一个更大问题的一部分(在多边形ID相同的情况下添加一个,makeUniqueIDs
参数来rbind.SpatialPolygonsDataFrame
),我遇到了来自rbind的奇怪消息:
> do.call("rbind",xd.small)
Error in match.names(clabs, names(xi)) :
names do not match previous names
- xd.小
dput
输出
我能找到的唯一其他信息就是这个问题,这让我相信rbind
也是问题的根源。
当然,我可以编写自己的类似 rbind 的函数,但大概这种match.names
检查的发生是有原因的,我很好奇它是什么。
第一个数据帧的名称(列名称)与第二个数据帧的名称不匹配。正如错误消息所说。
> 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
然后事情应该愉快地进行。
很容易使用unname()
函数:
data.frame <- unname(data.frame)
rbind()
需要两个对象名称相同。例如,第一个对象名:ID Age
,接下来的对象名:ID Gender
,如果要用rbind()
,会打印出来:
名称与以前的名称不匹配
按如下方式使用代码:
mylist <- lapply(pressure, function(i)read.xlsx(i,colNames = FALSE))#
mydata <- do.call('rbind',mylist)#