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

如何用R基于县域月度历史数据计算加权累积灾害严重程度得分?

县域月度累积灾害得分计算实现方案

1. 准备工作:加载工具包

先安装并加载dplyr(R中新手友好的常用数据处理包):

# 首次使用先安装
install.packages("dplyr")
# 加载包
library(dplyr)

2. 给数据按时间排序

必须保证每个县域的记录按年、月先后排列,否则滞后计算会出错:

# 假设你的原始数据框名为df,先完成排序
df_sorted <- df %>%
  arrange(county, year, month)

3. 计算加权累积得分

假设前1/2/3个月的权重分别为0.7、0.5、0.3(你可以根据需求直接修改这些系数),用lag()函数提取历史数据,按县域分组计算:

df_result <- df_sorted %>%
  # 按县域分组,确保只在同一个县内计算历史数据
  group_by(county) %>%
  mutate(
    accumulated_drought_score = drought_score +
      lag(drought_score, 1)*0.7 +  # 前1个月得分加权
      lag(drought_score, 2)*0.5 +  # 前2个月得分加权
      lag(drought_score, 3)*0.3    # 前3个月得分加权
  ) %>%
  # 取消分组,恢复普通数据框格式
  ungroup()

关键说明

  • group_by(county):这一步绝对不能省略,否则会把不同县的记录混在一起计算滞后数据,结果完全错误。
  • lag(x, n):用于提取当前行往上第n行的x值,每个县的前3条记录因为没有足够的历史数据,累积得分会显示为NA,和你提供的示例一致。
  • 权重可灵活调整,比如改成前1月0.8、前2月0.4、前3月0.2,直接修改代码中的系数即可。

用你提供的测试数据验证

把测试数据代入代码运行:

# 你的测试数据
df <- structure(list(county = c("Lafon", "Cueibet", "KapoetaEast", 
"KapoetaSouth", "Lafon", "Lafon"), year = c(2021, 2021, 2021, 
2022, 2021, 2021), month = c(8, 8, 12, 4, 6, 11), drought_score = c(4.6, 
4.6, 4.6, 4.6, 4.6, 4.6), accumulated_drought_score = c(NA, NA, 
NA, NA, NA, NA)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

# 运行代码后查看结果
print(df_result)

运行后Lafon县的记录会按6月、8月、11月排序:

  • 6月:无历史数据,累积得分为NA
  • 8月:仅前1个月(6月)数据,计算得 4.6 + 4.6*0.7 = 7.82
  • 11月:有前1(8月)、前2(6月)个月数据,计算得 4.6 + 4.6*0.7 + 4.6*0.5 = 10.12
    其他县仅1条记录,累积得分均为NA,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:18:24