【问题标题】:Remove rows contains certain value from spatial dataframe - solved从空间数据框中删除包含特定值的行 - 已解决
【发布时间】:2020-03-31 00:26:15
【问题描述】:

我想从空间 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(,"包")

1“sp”

bd attributes

类: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, No, 0, 0, 0, 012-0132 (805), 0-1008m, 0, 0, Concrete, Rural, ...

最大值:5299, ZEALANDIA ST, 2044000001, 2065, 480, Yes, 999, 1683, 45826.7818765, ZIDICH ROAD, 9925-9966m, 3520, 18.2, Unsealed, Urban, ...

df(bd@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 Unique_ID RAMM_Road_ iSequence SH OBJECTID ROADID RoadLength RoadNameAn Displaceme road_id AvgWidth ...

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

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

【问题讨论】:

  • HI 你能提供一个最小的例子吗? stackoverflow.com/help/minimal-reproducible-example
  • 抱歉,我无法在 r.. 中创建 shapefile,例如具有某些属性的折线。如果这有帮助,我尝试提供有关我的 sp df 的更多信息...否则,我想我需要上传我的部分数据

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


【解决方案1】:

我现在不相信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

【讨论】:

  • 您好,谢谢!因为我相信 bd 是一个空间对象,我重新运行我的代码以再次生成 bd,你的例子提醒我应该使用bd[- grep("ROAD", bd$RoadNameAn),] 而不是bd@data[- grep("ROAD", bd$RoadNameAn),] 否则我会失去我的台词(事实上这就是我想问的)。就错误而言,我想可能是我用其他东西重写了bd,所以它给我带来了错误。(对不起)
猜你喜欢
  • 2019-07-17
  • 2021-08-18
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 2017-09-27
  • 2020-08-01
相关资源
最近更新 更多