我有一个商店及其彼此间相对距离的矩阵,类似于此表,有3000行和3000列。我想创建一个新表,显示距离每个商店5公里或更近的商店数。
| | 商店1|
| - -|- -|
| 商店1|不适用|
| 商店2| 200(百万)|
我用一个数据框创建了这个距离矩阵,它包含每个悬挂物的x坐标和y坐标。
dist_matrix <- st_distance(df)
diag(dist_matrix) <- NA
这样就得到了一个矩阵,其中包含了悬挂物到下一个悬挂物的距离,单位为米。
我想找出位于每个商店5公里半径内的商店数量。我尝试这样做:`
#making the matrix into a data frame
dist_matrix <- data.frame(dist_matrix)
names(dist_matrix) <- df$store_id
rownames(dist_matrix) <- df$store_id
close <- dist_matrix %>%
mutate(ID=rownames(.)) %>%
gather('closest','dist',-ID) %>%
filter(!is.na(dist)) %>%
arrange(dist)
但它似乎不起作用。有人对如何解决这个问题有投入吗?
2条答案
按热度按时间mum43rcc1#
我相信你会发现使用基函数
colSums()
是很有用的,它与一个小于你所需要的任何阈值的逻辑距离矩阵配对。由于我无法访问您的数据,我将使用我最喜欢的三北卡罗来纳州城镇的距离矩阵(因为
nc.shp
位于{sf})。此示例的作用是:
logi
请注意,每个城市都会自动包含在内(距离为零--它位于原始矩阵的对角线上),因此您需要减去1。或者,就像您在原始代码中所做的那样,将diagonal设置为NA,并使用
na.rm = TRUE
/执行colSums()
,只要执行两个中的一个即可。3htmauhk2#
这有用吗?