具有不同字段的spRbind SpatialPolygonDataFrames

时间:2017-12-02 19:02:19

标签: r spatial rbind

我正在尝试追加两个具有不同字段的SpatialPolygonDataFrame。我一直在使用spRbind,并使用spChFID为每个数据框创建了唯一的行ID。但我仍然得到以下错误。

rbind(deparse.level,...)中的错误:   参数列数不匹配

一个例子是来自NHGIS的密苏里州和伊利诺伊州的块级shapefile日期。密苏里州有17个田地,伊利诺伊州有18个。

密苏里: 带驱动程序的OGR数据源:ESRI Shapefile 来源:“../ nhgis0030_shapefile_tl2010_290_block_2010”,图层:“MO_block_2010” 具有343565功能 它有17个字段

伊利诺伊: 带驱动程序的OGR数据源:ESRI Shapefile 来源:“../ nhgis0030_shapefile_tl2010_170_block_2010”,图层:“IL_block_2010” 具有451426功能 它有18个领域 Integer64字段读为字符串:ALAND10 AWATER10

1 个答案:

答案 0 :(得分:1)

您可以使用bind包中的raster方法

与往常一样,首先设置一些示例数据(您应该在问题中包含一些):

library(raster)
# example data
p <- shapefile(system.file("external/lux.shp", package="raster"))
p
#class       : SpatialPolygonsDataFrame 
#features    : 12 
#extent      : 5.74414, 6.528252, 49.44781, 50.18162  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
#variables   : 5
#names       : ID_1,     NAME_1, ID_2,   NAME_2, AREA 
#min values  :    1,   Diekirch,    1, Capellen,   76 
#max values  :    3, Luxembourg,    9,    Wiltz,  312 

p1 <- p[p$NAME_2=='Mersch', ]
p2 <- p[p$NAME_2=='Diekirch', ]
p3 <- p[p$NAME_2=='Remich', ]

# remove all fields for p1
p1 <- as(p1, 'SpatialPolygons')
# remove one field for p3
p3$NAME_1 <- NULL
# add a new field
p3$newfield <- 25

现在我们有了示例数据,使用bind来组合三个SpatialPolygon *对象:

x <- bind(p1, p2, p3)

data.frame(x)
#  ID_1   NAME_1 ID_2   NAME_2 AREA newfield
#1   NA     <NA> <NA>     <NA>   NA       NA
#2    1 Diekirch    2 Diekirch  218       NA
#3    2     <NA>    7   Remich  129       25