我正在尝试从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中拥有所有其他代码,并且想学习如何做。
答案 0 :(得分:1)
我们可以执行以下操作:
// really simple options
let options = {
columns: columns,
data: tabledata,
}
一旦我们注意到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
),它的元素(例如1、6、10作为其第一个元素str(a)
)就变得很容易。 a[[1]]
也是具有loc
可以访问的元素V3
的列表。因此,然后使用loc$V3
,我们遍历sapply
的元素,查看a
的对应元素,并对它们进行总结。结果loc$V3
返回一个向量,然后我们为结果创建数据帧或矩阵。