我正在处理一个问题,它使用的数据类似于下面的代码片段:
name = c('A', 'B', 'C', 'D', 'E','F','G','H','I','J')
lat = runif(10,min=37,max=39)
lon = runif(10,min=-91,max=-89)
metric = runif(10,min=0,250)
df = as.data.frame(cbind(name,lat,lon,metric))
我希望能够选择一个半径为X千米的半径,在本例中假设半径为15千米,然后使用该半径首先计算数据中每一行在该范围内的观测值的数量,其中每一行都有一个转弯作为半径的中心,然后,我希望取半径内所有观测值的平均值。
理想情况下,最终数据集应如下所示:
name lat lon metric count avg_metric
A 37.1 -91.1 44 6 34.33
B 37.2 -90.2 24 3 23.35
C 37.3 -90.3 37 2 19.93
这些数字是虚构的,但看起来像这样的东西是我的目标。
我发现了一些代码,这种做什么,我正在寻找下面:
library(spatialrisk)
# Stores
stores <- data.frame(store_id = 1:3,
lat = c(40.7505, 40.7502, 40.6045),
long = c(-73.8456, -73.8453, -73.8012))
# My location
me <- data.frame(lat = 40.7504, long = -73.8456)
spatialrisk::points_in_circle(stores, me$long[1], me$lat[1], radius = 100, lon = long)
然而,这并不是我想要的。有人能帮我指出正确的方向吗?任何帮助都将不胜感激!谢谢!
1条答案
按热度按时间vuktfyat1#
下面是一个使用
sf
库的例子,我转换到一个可以理解米的坐标系,然后使用st_buffer
画圆,st_within
计算重叠,然后使用sapply
计算计数和平均度量。