【问题标题】:Return complete cases of sf object in R在 R 中返回 sf 对象的完整案例
【发布时间】:2018-09-04 20:43:27
【问题描述】:

对于sf 对象,df <- df[complete.cases(df), ] 的等价物是什么?

我知道sf 对象的行为主要类似于具有“粘性”geometry 列的数据帧,但运行上述代码会返回以下错误:

df <- df[complete.cases(df), ]

Error in complete.cases(df) : invalid 'type' (list) of argument

这可能是由于sf 对象将其geometry 变量存储为列表。感谢您的意见!

【问题讨论】:

  • 所以您正在寻找具有 NA 几何形状的 sf 对象?还是带有 NA 元素的几何图形?
  • 两者都有问题。我只想要元素和几何的观察结果。
  • complete.cases 对于包含简单向量之外的任何内容的数据帧来说几乎是坏掉的。例如,POSIXlt 日期。 bugs.r-project.org/bugzilla/show_bug.cgi?id=16648

标签: r unique distinct sf


【解决方案1】:

您可以使用sf::st_is_empty() 来检查空几何图形

library(sf)

pt1 <- sf::st_sfc(sf::st_point())
pt2 <- sf::st_sfc(sf::st_point(c(0,0)))

sf <- sf::st_sf(geometry = c(pt1, pt2))

sf[!sf::st_is_empty(sf), ]

# imple feature collection with 1 feature and 0 fields
# geometry type:  POINT
# dimension:      XY
# bbox:           xmin: 0 ymin: 0 xmax: 0 ymax: 0
# epsg (SRID):    NA
# proj4string:    NA
# geometry
# 1 POINT (0 0)

【讨论】:

  • 这适用于缺失的几何,但不处理缺失的属性数据。将这个结果输入na.omit() 可以解决问题!谢谢! sf[!sf::st_is_empty(sf), ] %&gt;% na.omit()
【解决方案2】:

我没有缺少几何图形的数据集来测试它,但可能类似于:

lapply(sfd$geometry, function(x) any(is.na(x)))

将检查几何中是否有任何 NA 元素。您可以使用生成的向量来索引您的数据框并删除丢失的条目。

【讨论】:

  • pull 来自哪里?是在做sfd$geometry吗?
  • @Spacedman 我更新了我的答案以使用基数 R。dolyr::pull$ 基本相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
相关资源
最近更新 更多