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

如何使用for循环计算冲突爆发前的和平年数并生成peace变量

R语言实现和平年数统计方案

核心需求

按国家分组统计冲突爆发(conflict==1)前的连续和平年数:和平年份对应值为0,冲突年份取前序连续和平年的累计值,连续冲突年份保持该累计值不变。

最优实现方式

使用dplyr的向量化分组操作,相比for循环运行效率更高,尤其适配大样本面板数据,无需手动处理国家分组边界,逻辑更严谨。

实现代码

# 加载依赖包
library(dplyr)

# 构造示例数据
Df <- data.frame(
  country = c("A", "A", "A", "A", "A", "B","B", "B", "B"),
  year = c("1950", "1951", "1952", "1953", "1954", "1950", "1951", "1952", "1953"),
  conflict = c(0, 0, 1, 1, 0, 0, 1, 0, 1)
)

# 计算peace变量
Df <- Df %>%
  # 按国家分组处理
  group_by(country) %>%
  # 标记新和平期的起始:上一期是冲突/分组首行,本期是和平
  mutate(peace_period = cumsum(lag(conflict, default = 1) == 1 & conflict == 0)) %>%
  # 按国家+和平期分组,计算该和平期的总长度
  group_by(country, peace_period) %>%
  mutate(peace_length = n()) %>%
  # 生成最终peace列:和平年取0,冲突年取对应和平期长度
  ungroup() %>%
  mutate(peace = ifelse(conflict == 0, 0, peace_length)) %>%
  # 移除中间辅助列
  select(-peace_period, -peace_length)

运行后输出的peace列与预期完全匹配:c(0, 0, 2, 2, 0, 0, 1, 0, 1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:24:09