优先按Damage-to-GDP指标基于75th percentile构造自然灾害虚拟变量的R实现咨询
R环境下自然灾害虚拟变量构造实现
核心实现逻辑
完全匹配给定赋值规则:
- 优先使用
Damage_to_GDP指标判断:指标值严格高于该指标非缺失样本的75分位时,虚拟变量取1 - 当
Damage_to_GDP为缺失值时,切换到Affected_people_to_total指标判断:指标值严格高于该指标非缺失样本的75分位时,虚拟变量取1 - 不满足上述触发条件的样本,虚拟变量统一取0
注意:计算分位数时必须加入na.rm = TRUE参数排除缺失值,否则会因缺失值干扰得到无效分位阈值
具体实现代码
第一步:计算两个指标的75分位阈值
# 计算Damage-to-GDP的75%分位阈值 damage_q75 <- quantile(data$Damage_to_GDP, 0.75, na.rm = TRUE) # 计算受灾人口占总人数比例的75%分位阈值 affected_q75 <- quantile(data$Affected_people_to_total, 0.75, na.rm = TRUE)
第二步:逐行赋值生成虚拟变量
提供两种常用实现方式,按需选择即可:
方式1:tidyverse语法(逻辑可读性更强)
# 若未安装dplyr,先执行 install.packages("dplyr") library(dplyr) data <- data %>% mutate( disaster_dummy = case_when( # Damage数据非缺失时的判断规则 !is.na(Damage_to_GDP) & Damage_to_GDP > damage_q75 ~ 1, !is.na(Damage_to_GDP) & Damage_to_GDP <= damage_q75 ~ 0, # Damage数据缺失时切换受灾人口指标判断 is.na(Damage_to_GDP) & Affected_people_to_total > affected_q75 ~ 1, is.na(Damage_to_GDP) & Affected_people_to_total <= affected_q75 ~ 0 ) )
方式2:基础R语法(无需依赖额外包)
data$disaster_dummy <- ifelse( # 判断分支:Damage非缺失走第一套规则 test = !is.na(data$Damage_to_GDP), yes = as.integer(data$Damage_to_GDP > damage_q75), # Damage缺失走第二套规则 no = as.integer(data$Affected_people_to_total > affected_q75) )
结果验证与特殊情况提示
示例数据运行效果
用给定的示例数据集执行上述代码后,输出结果为:
- Tonga行:Damage值0.0102 < 计算得到的Damage类75分位阈值0.3852,虚拟变量取0
- Samao行:Damage值0.5102 > 对应阈值,虚拟变量取1
- Vanuatu行:Damage值为缺失,其受灾人口值刚好等于该指标的75分位阈值,不满足“严格高于”的触发规则,虚拟变量取0
注意事项
若样本同时存在Damage_to_GDP和Affected_people_to_total双缺失的情况,代码输出的虚拟变量会为NA,建议在赋值前先统计这类样本的占比,根据研究需求决定是剔除还是补充默认赋值。
内容的提问来源于stack exchange,提问作者Lovemydogsxx
相关产品推荐
相关产品推荐

