在R中汇总相同国家年份观测值并生成二分类事件指示变量
R实现按国家年份分组聚合二分类变量的方案
核心逻辑:按Country和Time两个字段分组后,对目标二分类变量取最大值即可——只要分组内出现过1,最大值就是1,全为0则最大值为0,完全匹配需求。
方法1:使用tidyverse系列的dplyr包(主流常用写法)
# 加载依赖包 library(dplyr) # 构造示例数据,你可以替换为自己的实际数据集 df <- tibble( Country = c("A","A","B","C","D","D","D","D"), Time = rep(2000, 8), Conflict = 1:8, `Bio Weapons` = c(0,0,1,0,1,0,0,1) ) # 分组聚合得到结果 result <- df %>% # 指定分组维度 group_by(Country, Time) %>% # 对目标变量取最大值,.groups="drop"是聚合后自动取消分组,避免后续操作报错 summarise(`Bio Weapons` = max(`Bio Weapons`), .groups = "drop") # 查看输出结果 print(result)
如果需要批量处理多个同类二分类变量,可以改用across语法:
result <- df %>% group_by(Country, Time) %>% # 括号内填写需要处理的变量名即可批量聚合 summarise(across(c(Conflict, `Bio Weapons`), max), .groups = "drop")
方法2:使用Base R(无需安装额外依赖包)
用原生aggregate函数即可实现分组聚合:
# 构造示例数据 df <- data.frame( Country = c("A","A","B","C","D","D","D","D"), Time = rep(2000, 8), Conflict = 1:8, Bio_Weapons = c(0,0,1,0,1,0,0,1) ) # 分组聚合,列名带空格需要用反引号包裹 result <- aggregate(Bio_Weapons ~ Country + Time, data = df, FUN = max)
内容的提问来源于stack exchange,提问作者user14528043
相关产品推荐
相关产品推荐

