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

优先按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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 11:54:08