使用 sf 在 R 中及时查找最近的邻居和 space
Finding nearest neighbours in time and space in R using sf
我有一个由威尔士投票站组成的数据集,并在其中附加了一个日期列。我们可以想象这个日期是访问这个投票站以检查设施的日期(例如)。
我想做的是锻炼身体:
我想判断地理点是否在一定距离内
- 这个我是用self_joining管理的,用st_buffer和st_within计算1000米以内,然后计算邻居数
以及样本日期之间的间隔
- 这个我有点问题
我想我想做的是
每个投票站
- 计算邻居的数量(到目前为止很容易)
- 为每个邻居确定采样日期之间的间隔
- return 空间 object(可能用于在 tmaps 中绘制)
这是我得到的一些测试代码,它生成 sf 数据集,计算邻居的数量和 returns。
这真的是让我难过的日期间隔。与其说是日期间隔的计算,不如说是生成这些具有日期间隔的投票站集群的方法。
生成(在本例中)108 个投票站集群是否更好?
我在较大的数据集中尝试做的是随时间计算点簇。
我有大约 2000 条带日期的记录。我想说:
对于这 2000 条记录中的每条记录,计算一段距离内和一段时间内的邻居数量。
我认为这可能更好
计算每个相邻点的簇并可视化
然后
从集群中移除时间范围之外的邻居并可视化
虽然,在键入此内容时,我想知道是否先排除不在时间范围内的点然后计算邻居会更有效?
polls<-st_as_sf(read.csv(url("https://www.caerphilly.gov.uk/CaerphillyDocs/FOI/Datasets_polling_stations_csv.aspx")),
coords = c("Easting","Northing"),crs = 27700)%>%
mutate(date = sample(seq(as.Date('2020/01/01'), as.Date('2020/05/31'), by="day"), 147))
test_stack<-polls%>%st_join(polls%>%st_buffer(dist=1000),join=st_within)%>%
filter(Ballot.Box.Polling.Station.x!=Ballot.Box.Polling.Station.y)%>%
add_count(Ballot.Box.Polling.Station.x)%>%
rename(number_of_neighbours = n)%>%
mutate(interval_date = date.x-date.y)%>%
subset(select = -c(6:8,10,11,13:18))## removing this comment will summarise the data so that only number of neighbours is returned %>%
distinct(Ballot.Box.Polling.Station.x,number_of_neighbours,date.x)%>%
filter(number_of_neighbours >=2)
我觉得可能就这么简单
tm_shape(test_stack)+tm_dots(col = "number_of_neighbours", clustering =T, size = 0.5)
我不确定聚类在 leaflet 中是如何工作的,但在这个测试数据上效果很好。
我有一个由威尔士投票站组成的数据集,并在其中附加了一个日期列。我们可以想象这个日期是访问这个投票站以检查设施的日期(例如)。
我想做的是锻炼身体:
我想判断地理点是否在一定距离内
- 这个我是用self_joining管理的,用st_buffer和st_within计算1000米以内,然后计算邻居数
以及样本日期之间的间隔
- 这个我有点问题
我想我想做的是 每个投票站
- 计算邻居的数量(到目前为止很容易)
- 为每个邻居确定采样日期之间的间隔
- return 空间 object(可能用于在 tmaps 中绘制)
这是我得到的一些测试代码,它生成 sf 数据集,计算邻居的数量和 returns。 这真的是让我难过的日期间隔。与其说是日期间隔的计算,不如说是生成这些具有日期间隔的投票站集群的方法。 生成(在本例中)108 个投票站集群是否更好?
我在较大的数据集中尝试做的是随时间计算点簇。 我有大约 2000 条带日期的记录。我想说: 对于这 2000 条记录中的每条记录,计算一段距离内和一段时间内的邻居数量。
我认为这可能更好 计算每个相邻点的簇并可视化 然后 从集群中移除时间范围之外的邻居并可视化
虽然,在键入此内容时,我想知道是否先排除不在时间范围内的点然后计算邻居会更有效?
polls<-st_as_sf(read.csv(url("https://www.caerphilly.gov.uk/CaerphillyDocs/FOI/Datasets_polling_stations_csv.aspx")),
coords = c("Easting","Northing"),crs = 27700)%>%
mutate(date = sample(seq(as.Date('2020/01/01'), as.Date('2020/05/31'), by="day"), 147))
test_stack<-polls%>%st_join(polls%>%st_buffer(dist=1000),join=st_within)%>%
filter(Ballot.Box.Polling.Station.x!=Ballot.Box.Polling.Station.y)%>%
add_count(Ballot.Box.Polling.Station.x)%>%
rename(number_of_neighbours = n)%>%
mutate(interval_date = date.x-date.y)%>%
subset(select = -c(6:8,10,11,13:18))## removing this comment will summarise the data so that only number of neighbours is returned %>%
distinct(Ballot.Box.Polling.Station.x,number_of_neighbours,date.x)%>%
filter(number_of_neighbours >=2)
我觉得可能就这么简单
tm_shape(test_stack)+tm_dots(col = "number_of_neighbours", clustering =T, size = 0.5)
我不确定聚类在 leaflet 中是如何工作的,但在这个测试数据上效果很好。