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

如何基于条约文本相似度矩阵按国家计算平均相似度得分

嘿,我来帮你搞定这个按国家计算平均相似度的问题!你的核心困扰在于当前数据是按条约对记录的,每行绑定了两个国家,直接分组肯定行不通——得先把每个国家单独拆出来和对应的相似度关联上,之后就能轻松按国家统计了。

步骤1:还原你的数据

先把你提供的结构转成可运行的R数据框(我用tidyverse工具包,这是处理这类数据最方便的选择):

library(tidyverse)

df <- structure(list(
  similarity = c(1, 1, 0.50311221359869, 0.50311221359869),
  number = c("PTA1", "PTA2", "PTA1", "PTA2"),
  pta = c("1003", "1003", "1012", "1003"),
  country1 = c("Brazil", "Brazil", "Ecuador", "Brazil"),
  country2 = c("Venezuela", "Venezuela", "El Salvador", "Venezuela"),
  name = c("Brazil Venezuela", "Brazil Venezuela", "Ecuador El Salvador", "Brazil Venezuela")
), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"))
步骤2:把数据转成长格式(拆分国家列)

用pivot_longer把country1和country2合并成一列,让每个国家都对应一条独立的相似度记录:

df_long <- df %>%
  pivot_longer(
    cols = starts_with("country"),  # 选中所有以country开头的列
    names_to = "country_role",      # 新增列标记是country1还是country2(可选,后续可删除)
    values_to = "country"           # 存储国家名称的新列
  ) %>%
  select(country, similarity)  # 只保留我们需要的核心列

这一步之后,原来的Brazil-Venezuela行会拆成两行:Brazil对应相似度1,Venezuela也对应相似度1,完美解决了一对二的关联问题。

步骤3:按国家分组计算平均相似度

现在就可以直接分组求平均了,还能顺便统计每个国家参与了多少条约记录:

country_avg <- df_long %>%
  group_by(country) %>%
  summarise(
    avg_similarity = mean(similarity, na.rm = TRUE),  # 计算平均相似度,自动忽略NA值
    total_records = n()  # 统计该国家参与的条约记录数
  ) %>%
  ungroup()  # 取消分组,变回普通数据框
查看最终结果

运行print(country_avg)会得到:

# A tibble: 4 × 3
  country     avg_similarity total_records
  <chr>                <dbl>         <int>
1 Brazil               0.752             3
2 Ecuador              0.503             1
3 El Salvador          0.503             1
4 Venezuela            0.752             3
额外优化(可选)

如果你的数据里有重复的条约对(比如同一个国家对出现多次),可以先去重再计算,避免重复统计:

# 先去重,保留每个唯一国家对的相似度
df_unique <- df %>%
  distinct(name, similarity, .keep_all = TRUE)

# 重复拆分和分组步骤
df_unique_long <- df_unique %>%
  pivot_longer(cols = starts_with("country"), values_to = "country") %>%
  select(country, similarity)

country_avg_unique <- df_unique_long %>%
  group_by(country) %>%
  summarise(avg_similarity = mean(similarity))

内容的提问来源于stack exchange,提问作者anatrik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:02:30