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

按组计算列中值为1的事件间和平年数的代码优化需求

符合需求的和平年数计算代码

核心需求

  • 和平年数累计延续至冲突年份,冲突年的peace值不重置为0
  • 冲突年份的下一年,peace值从0开始

问题代码分析

  • peace1:冲突年份的peace1计算逻辑会导致其无法延续累计值,比如上一次冲突在2018年,2021年冲突时peace1仅为2,未覆盖到冲突当年的累计
  • peace2:分组逻辑错误,既无法让冲突年延续累计值,也不符合冲突下一年从0开始计数的要求

修正后的代码

# 先确保数据按国家和年份升序排列
d_muslim <- d_muslim %>%
  arrange(country, year) %>%
  group_by(country) %>%
  mutate(
    # 标记新周期起点:第一次观测默认开启第一个周期,冲突年份的下一行开启新周期
    new_cycle = lag(conflict == 1, default = TRUE),
    # 生成每个周期的唯一ID
    cycle_id = cumsum(new_cycle)
  ) %>%
  # 按国家+周期分组计算peace值
  group_by(country, cycle_id) %>%
  mutate(peace = year - first(year)) %>%
  ungroup() %>%
  # 清理辅助变量
  select(-new_cycle, -cycle_id)

逻辑说明

  1. 排序校验:先按国家和年份排序,保证时间序列的连续性
  2. 周期划分:通过new_cycle标记每个和平周期的起点,冲突发生后,下一年自动开启新周期
  3. 累计计算:每个周期内,peace值为当前年份与周期起始年份的差值,实现:
    • 冲突下一年作为周期起点,peace值为0
    • 后续年份(包括冲突年)逐年累计,直到下一次冲突触发新周期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:08:09