【问题标题】:Which row in a SpatialPolygonsDataFrame by multipul logicalsSpatialPolygonsDataFrame 中的哪一行由多个逻辑
【发布时间】:2019-01-04 05:37:04
【问题描述】:

我有一个 SpatialPolygonsDataFrame,其中有 3 个岛屿。在这些岛屿上,有命名的位置,但岛屿之间的名称并不是唯一的。我找到了一种方法来确定在各个岛之间复制了哪些名称,但我无法返回它们对应的行。理想情况下,我会找到一种访问这些行的方法,以便我可以修改位置名称以创建在岛屿之间唯一的名称。 使用来自 sp 的 Meuse 数据集我想出了这个

library(sp)
data("meuse")
coordinates(meuse) <- ~ x + y
str(meuse)
a <- meuse[meuse$lime == "0" && meuse$landuse == "Ah",]
dim(a)
subset(meuse, lime == "1")

a 的返回值为 0,但是当您查看最后一个子集行时,显然有符合该条件的行。关于我在这里缺少什么或我应该做什么的任何建议?

【问题讨论】:

  • meuse 上的所有数据都已售出 == "1"
  • 不清楚你在问什么。 a 的行数为零,因为数据集中没有 soil == 0。相比之下,subset(meuse, soil == "1") 的行数超过零,因为数据集中有 soil == 1。一切都按预期工作。
  • 感谢@CarlosSantilan 和 www 我的示例有问题。但是,当我将土壤改为石灰时,您会发现我仍然无法按照预期的方式进行子集化。

标签: r sp


【解决方案1】:

问题出在&amp;&amp;中

a <- meuse[meuse$lime == "0" && meuse$landuse == "Ah",]

正如文档所说,

& 和 && 表示逻辑 AND 和 |和 ||表示逻辑或。这 较短的形式执行元素比较的方式与 算术运算符。 较长的形式从左到右计算 只检查每个向量的第一个元素。

例如,

c(TRUE, TRUE) && c(FALSE, TRUE)
# [1] FALSE
c(TRUE, TRUE) & c(FALSE, TRUE)
# [1] FALSE  TRUE

所以,你想要

a <- meuse[meuse$lime == "0" & meuse$landuse == "Ah",]
dim(a)
# [1] 31 12

【讨论】:

  • @Reed,有帮助吗?
猜你喜欢
  • 2016-05-24
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 2016-05-28
相关资源
最近更新 更多