如何用st_distance()生成含国家名称的地理距离数据框?
生成国家间首都距离的结构化数据框
当前运行代码后st_distance返回的是距离矩阵对象,要转换成以country.etc为行、列名的结构化数据框,可按以下步骤修改代码:
修改后的完整代码
library(maps) library(sf) library(tidyverse) library(units) library(rnaturalearth) # 转换世界城市数据为sf格式 cities1 <- st_as_sf(world.cities, coords = c("long", "lat"), crs = 4326) # 筛选各国首都 capitals <- filter(cities1, capital == 1) # 计算首都间距离矩阵 dist_matrix <- st_distance(capitals, capitals) # 转换为结构化数据框 dist_df <- dist_matrix %>% as.matrix() %>% # 转为普通矩阵 drop_units() %>% # 移除距离单位(如需保留可删除此行) as.data.frame() %>% `row.names<-`(capitals$country.etc) %>% # 设置行名为国家名 mutate(country.etc = row.names(.), .before = 1) # 添加首列为国家名 # 设置列名为国家名 colnames(dist_df)[-1] <- capitals$country.etc
代码说明
st_distance返回的是带单位的距离矩阵,用as.matrix()转为普通矩阵,drop_units()可移除千米/米等单位标签;- 通过
row.names<-将行名设置为各国country.etc; - 用
mutate添加第一列country.etc,保证数据框结构符合需求; - 最后将除第一列外的列名替换为
country.etc,完成行列对齐。
最终数据框格式示例
country.etc Jordan United Arab Emirates ... Jordan 0 2234.5 ... United Arab Emirates 2234.5 0 ... ... ... ... ...
内容的提问来源于stack exchange,提问作者Lu Yip
相关产品推荐
相关产品推荐

