R 绑定多个shapefile会导致行名错误

R 绑定多个shapefile会导致行名错误,r,raster,shapefile,sp,R,Raster,Shapefile,Sp,我有一个大约20个shapefile的列表,我想把它们绑定成一个。这些形状文件有不同数量的字段-有些有1个,有些有2个。示例如下所示: # 1 field > dput(head(shp[[1]])) structure(list(area = c(1.60254096388, 1.40740270051, 0.093933438653, 0.609245720277, 22.892748868, 0.0468096597394)), row.names = 0:5, cl

我有一个大约20个shapefile的列表,我想把它们绑定成一个。这些形状文件有不同数量的字段-有些有1个,有些有2个。示例如下所示:

 # 1 field 
 > dput(head(shp[[1]]))
  structure(list(area = c(1.60254096388, 1.40740270051, 0.093933438653, 
  0.609245720277, 22.892748868, 0.0468096597394)), row.names = 0:5, class = "data.frame")

 # 2 fields 
> dput(head(shp[[3]]))
  structure(list(per = c(61, 70, 79, 90, 57, 66), area = c(2218.8, 
  876.414, 2046.94, 1180.21, 1779.12, 122.668)), row.names = c(0:5), class = "data.frame")
我使用了以下代码来绑定它们,它的工作方式与我所希望的一样:

merged<- raster::bind(shp, keepnames= FALSE, variables = area)
writeOGR(merged, './shp', layer= 'area', driver="ESRI Shapefile")
我不知道这是为什么。形状文件没有更改,它们只是子集。我尝试以下面所示的方式删除行名,但仍然会抛出相同的错误

rownames(shp[[3]]@data) <- NULL

rownames(shp[[3]]@data)我认为问题在于您将
@data
(属性)子集化,但您应该将整个对象子集化。像这样的

x <- shp[[3]]  # for simplicity
x <- x[x$Area >= 50, ]
names(x)[names(x) == "Area"] <- "area"
shp[[3]] <- x

x如果没有可复制的示例,很难准确地知道发生了什么。如果您愿意从
光栅
切换,那么使用
sf
软件包,这些类型的操作是多么容易,这给我留下了深刻的印象。见答案
rownames(shp[[3]]@data) <- NULL
x <- shp[[3]]  # for simplicity
x <- x[x$Area >= 50, ]
names(x)[names(x) == "Area"] <- "area"
shp[[3]] <- x