【问题标题】:Get sum of field values within distance with simple features (sf)使用简单特征 (sf) 获取距离内的字段值总和
【发布时间】:2018-12-04 08:13:54
【问题描述】:

我正在尝试从 sf 对象上的字段中获取到每个点的给定距离内的所有点的值的总和,不包括该点的值。

set.seed(123);m=matrix(runif(30,1,40),ncol=3)
loc<-m %>% 
  as.data.frame %>% 
  sf::st_as_sf(coords = c(1,2))
a<-st_is_within_distance(loc,dist=10)
> a
Sparse geometry binary predicate list of length 10, where the predicate was `is_within_distance'
 1: 1, 6, 10
 2: 2, 4
 3: 3
 4: 2, 4
 5: 5, 8
 6: 1, 6
 7: 7, 9
 8: 5, 8
 9: 7, 9
 10: 1, 10

我们如何获得一个包含这 10 个点和 V3 总和的列表的数据框?

    point|sum
    1    | sum_of_v3_of(6,10)
    2    | sum_of_v3_of(4)
...

使用 postgis 很容易做到这一点,但所有其他代码都在 R 中,并且想学习如何做到这一点。

【问题讨论】:

    标签: r spatial sf


    【解决方案1】:

    我们可能会做以下事情:

    data.frame(point = 1:length(a), sum = sapply(a, function(p) sum(loc$V3[p])) - loc$V3)
    #    point      sum
    # 1      1 35.37012
    # 2      2 39.77652
    # 3      3  0.00000
    # 4      4 28.01933
    # 5      5 24.17154
    # 6      6 35.69203
    # 7      7 12.27723
    # 8      8 26.57253
    # 9      9 22.21857
    # 10    10 35.69203
    

    一旦我们注意到a 是一个列表(参见str(a)),它的第一个元素是1、6、10 in 作为它的第一个元素a[[1]],并且loc 也是一个带有元素V3 的列表,loc$V3 可以访问该元素。那么,然后使用sapply我们遍历a的元素,查看loc$V3对应的元素,并总结出来。结果,sapply 返回一个向量,剩下的就是为结果创建一个数据框或矩阵。

    【讨论】:

    • 太棒了!谢谢!正是这样! (只需减去点本身的值,但效果很好)
    猜你喜欢
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2017-12-30
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多