无法在shapefile中对数据进行子集化

时间:2016-11-22 22:48:18

标签: r gis shapefile rgdal

我想在shapefile中执行子集化,而不指定.dbf文件中第一列的名称。 更确切地说,我想在.dbf的第一列中选​​择值为1的所有行,但我不想指定此列的名称。

例如,此脚本有效,因为我指定了列的名称(作为columnName)

library(rgdal) # readOGR

shapeIn <- readOGR(nomeFile)
shapeOut <- subset(shapeIn, columnName == 1)

相反它不起作用

shapeOut <- (shapeIn[,1] == 1)

我收到一条错误消息: 比较(1)仅适用于原子和列表类型shapeOut和shapeIn是ESRI矢量文件。

这是我的shapeIn

的标题
   coordinates mask_1000_
1 (54000, 1218000)          0
2 (55000, 1218000)          0
3 (56000, 1218000)          0
你能帮帮我吗?谢谢

1 个答案:

答案 0 :(得分:3)

shapeOut <- (shapeIn[,1] == 1)

没有工作因为SpatialPolygonsDataFrames包含除数据之外的其他信息。所以&#34;普通&#34; data.frame子集并不以相同的方式工作。要使它工作,你必须进行&#34;逻辑检查&#34;用于@data插槽的子集:这应该有效(使用子集或&#34;直接&#34;索引):

shapeOut <- subset(shapeIn, shapeIn@data[,1] == 1)

OR

shapeOut <- shapeIn[shapeIn@data[,1] == 1,]

(但是,根据最近的经验,按列号引用数据很少是个好主意...... ;-))

ciao Giacomo !!!