You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 21:10:26