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

如何基于unvotes包计算1990年后美德联大投票平均一致频率?

计算1990年以来美德联大投票一致频率的步骤

首先调整你的初始代码逻辑,filter应该放在group_by之前,先缩小数据集能提升后续计算效率,且原group_by的列不需要包含country和vote,我们要按决议和年份聚合两国的投票情况:

library(tidyverse)
library(lubridate)
library(unvotes)

# 合并数据集(若未完成)
merged <- un_votes %>%
  left_join(un_roll_calls, by = "rcid")

countries <- c("United States", "Germany")

# 第一步:过滤目标国家与时间范围的数据
filtered_data <- merged %>%
  filter(country %in% countries, year(date) >= 1990) %>%
  select(year = year(date), rcid, unres, country, vote)

接下来按决议(rcid对应单个联大决议)和年份分组,判断两国在同一决议上的投票是否一致:

# 第二步:按决议、年份分组,验证投票一致性
agreement_by_resolution <- filtered_data %>%
  group_by(year, rcid, unres) %>%
  # 确保每个决议都有两国的投票记录,排除缺失数据
  filter(n() == 2) %>%
  # 两国投票相同时,唯一投票值数量为1,标记为一致
  summarize(
    agreed = n_distinct(vote) == 1,
    .groups = "drop"
  )

然后计算每年的一致频率,以及1990年以来的整体平均一致频率:

# 第三步:计算年度一致频率
annual_agreement <- agreement_by_resolution %>%
  group_by(year) %>%
  summarize(
    total_resolutions = n(),
    agreed_resolutions = sum(agreed),
    agreement_frequency = agreed_resolutions / total_resolutions,
    .groups = "drop"
  )

# 第四步:计算1990年以来的加权平均一致频率
overall_average <- annual_agreement %>%
  summarize(
    overall_average_frequency = weighted.mean(agreement_frequency, total_resolutions)
  )

关键说明

  • n_distinct(vote) == 1:通过判断投票值的唯一数量,快速识别两国投票是否一致。
  • weighted.mean:用每年的决议总数作为权重计算整体平均,比简单平均更贴合实际(不同年份决议数量差异大)。
  • filter(n() == 2):排除某国缺席投票的决议,避免错误统计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:20:26