我想在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
你能帮帮我吗?谢谢
答案 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 !!!