从空间数据框中删除包含某些值的行-已解决

时间:2019-12-06 02:10:32

标签: r data-manipulation spatial-data-frame

我想从空间data.frame中删除具有特定值的行,因为标准R grep()似乎并未传播通过sp类对象的所有插槽。

bd@data[- grep("xcluded", bd@data$Notes),]

它给我一个错误:

  

错误:尝试从不是S4对象的对象(类“ data.frame”)中获取插槽“数据”

我读到sp.na.omit可以删除NA,但不知道如何删除具有特定值的行(例如,删除bd @ data $ Notes中具有“排除”的行)。有什么建议么?

对不起,我无法通过R创建shapefile示例,但我会尝试提供有关sp数据帧的更多信息:

> class(bd)

  

1“ SpatialLinesDataFrame”

     

attr(,“ package”)

     

1“ sp”

bd attributes

  

class:SpatialLinesDataFrame

     

功能:8855

     

范围:172.6811、174.5966,-36.36374,-34.42634(xmin,xmax,ymin,ymax)

     

crs:+ proj = longlat + datum = WGS84 + ellps = WGS84 + towgs84 = 0,0,0

     

变量:134

     

名称:OBJECTID_1,Name_in_us,Unique_ID,RAMM_Road_,iSequence,SH,OBJECTID,ROADID,RoadLength,RoadNameAn,Displaceme,road_id,AvgWidth,pave,CJNEX_urba,...

     

最小值:1,014-0000,1188496,0,0,否,0,0,0,012-0132(805),0-1008m,0,0,混凝土,农村,...      

最大值:5299,ZEALANDIA ST,2044000001,2065,480,是,999,1683,45826.7818765,ZIDICH ROAD,9925-9966m,3520,18.2,未密封,城市,...

df(bd @ lines)内的折线

  

$ lines [[1000]]

     

“线”类的对象

     

广告位“行”:

     

[1]

     

“线”类的对象

     

插槽“坐标”:

     [,1]      [,2]
     

[1,] 174.3629 -35.77290

     

[2,] 174.3627 -35.77281

     

[3,] 174.3624 -35.77276

bd@data[1000,]

  

OBJECTID_1 Name_in_us唯一ID RAMM_Road_ iSequence SH OBJECTID ROADID RoadLength RoadName一个Displaceme road_id AvgWidth ...

     

1000 1000 DOMAIN RD 1.16e + 08 116 2否89116 94.75686 DOMAIN RD(116)0-95m ...

解决方案: 1.作为下面的答案/评论 2.使用bd[- grep("xcluded", bd$Notes),]代替

1 个答案:

答案 0 :(得分:0)

在这一点上,我不相信bd不再是空间对象,或者这样:

bd@data[- grep("xcluded", bd@data$Notes),]

不是产生此错误的行:

Error: trying to get slot "data" from an object (class "data.frame") that is not an S4 object

该错误表明它正在尝试从数据帧获取数据插槽。与grep或子集无关。

我可以复制该错误消息:

> d = data.frame(x=1:10)
> d@data
Error: trying to get slot "data" from an object (class "data.frame") that is not an S4 object 
> 

但是我不能用空间sp类对象复制它:

> Sldf
class       : SpatialLinesDataFrame 
features    : 2 
extent      : 1, 3.05, 1, 3.05  (xmin, xmax, ymin, ymax)
crs         : NA 
variables   : 1
names       :  Z 
min values  : AA 
max values  : AB 
> Sldf@data
   Z
1 AA
2 AB
> Sldf@data[-grep("B",Sldf@data$Z),,drop=FALSE]
   Z
1 AA