将多边形分配给 R 数据框中的数据点

艾莉

我有两个数据框:

  • points包含一系列带x, y坐标的点
  • poly 包含两个多边形的坐标(我实际上有 100 多个,但在这里保持简单)。

我希望能够向数据框中添加points一个名为的额外列Area,其中包含点所在多边形的名称。

poly <- data.frame(
pol= c("P1", "P1","P1","P1","P1","P2","P2","P2","P2", "P2"),
x=c(4360, 7273, 7759, 4440, 4360, 8720,11959, 11440,8200, 8720),
y=c(1009, 9900,28559,28430,1009,9870,9740,28500,28040,9870))

points <- data.frame(
       object = c("P1", "P1","P1","P2","P2","P2"),
       timestamp= c(1485670023468,1485670023970, 1485670024565, 1485670025756,1485670045062, 1485670047366),
       x=c(6000, 6000, 6050, 10000, 10300, 8000),
       y=c(10000, 20000,2000,5000,20000,2000))

plot(poly$x, poly$y, type = 'l')
text(points$x, points$y, labels=points$object )

所以基本上在这个例子中,前 2 行应该有,Area= "P1"而最后一个点应该是空白的,因为该点不包含在任何多边形中。

我曾尝试使用该函数,in.out但无法按照我的描述构建数据框。

非常感谢任何帮助!

李哲源

尽管这是使用for循环,但实际上速度相当快。

library(mgcv)

x <- split(poly$x, poly$pol)
y <- split(poly$y, poly$pol)

todo <- 1:nrow(points)
Area <- rep.int("", nrow(points))
pol <- names(x)

# loop through polygons
for (i in 1:length(x)) {
  # the vertices of i-th polygon
  bnd <- cbind(x[[i]], y[[i]])
  # points to allocate
  xy <- with(points, cbind(x[todo], y[todo]))
  inbnd <- in.out(bnd, xy)
  # allocation
  Area[todo[inbnd]] <- pol[i]
  # update 'todo'
  todo <- todo[!inbnd]
  }

points$Area <- Area

其效率的两个原因:

  • for循环是通过多边形,而不是点。所以如果你有 100 个多边形和 100000 个点要分配,循环只有 100 次迭代而不是 100000。在每次迭代中,in.out利用C 函数的矢量化能力
  • 它以渐进的方式工作。一旦分配了一个点,它就会被排除在分配之外。todo变量控制通过循环分配的点数。随着它的发展,工作集正在减少。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将定量变量分配给R中数据框中的数据点

如何将质心(标记)的数据分配给它所属的voronoi / thiessen多边形?(右)

从R中的向量将值分配给数据框的一列

R:将值分配给数据框中的字符行

R:将数据框列分配给函数中的变量

根据逻辑表达式将值分配给R数据框中的新列

将新列分配给R中第二个数据框的数据框列表

如何在python3中为几何分配单位并将投影分配给多边形?

将颜色更改为 R 中的传单多边形

将数据栅格化到多边形以计算R中的平均值

r - 用传单在数据框列表中绘制多边形

R 将列表中的字符值分配给数据框列中的唯一组

R如何将shapefile中的多边形要素与许多多边形合并?(可重现的代码示例)

R:将行作为列名分配给数据框

在R中将变量条件分配给数据框

如何将数据点从数据框添加到斯洛伐克行政区域的多边形地图?

R中的Joing数据框和空间多边形数据框

将向量分配给R中数据表中特定的现有行

根据 R 中同一数据框中另一列的值将值分配给 R 中的列

将多个类别值分配给r中的一系列数据帧变量

将最小数据值分配给 R 中的新变量 - 嵌套 for 循环

将累计总和分配给数据点分组

SpatialPolygonsDataFrame R中每个多边形的边界框

将扇区分配给R中的角度

将类别值分配给r中的多个变量

将顺序分配给R中的数字列表

将值分配给R中数组的特定维

将值非随机分配给R中的矩阵

将序数值分配给 R 中的数值向量