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

R语言基于lag函数实现国名替换与按区域计算周新增确诊方法

代码异常原因与正确实现方案

原有代码的核心问题

  • lag() 函数参数写法完全无效:order_by = (date = "1 week") 属于错误的赋值语法,既没有指定按日期排序的规则,也无法实现取7天前观测值的逻辑。
  • 缺少分组限定:直接对全量数据集计算滞后值,会出现不同国家/区域的确诊数据互相串值的问题,完全不符合“对应区域独立计算新增”的要求。
  • 计算逻辑偏差:周新增确诊的本质是「当前累计确诊值 - 7天前累计确诊值」,原代码直接将滞后值赋给new_cases列,未做差值运算,最终结果必然不符合预期。

可正常运行的实现代码

# 需提前安装依赖包:install.packages(c("dplyr", "stringr", "lubridate"))
library(dplyr)
library(stringr)
library(lubridate)

covid19_cases <- covid19 %>%
  # 替换国家名称的标准写法
  mutate(
    country_region = str_replace(country_region, "Korea, South", "South Korea")
  ) %>%
  # 按区域分组,隔离不同区域的计算逻辑
  group_by(country_region) %>%
  # 组内按日期升序排序,保证时间序列顺序正确
  arrange(date, .by_group = TRUE) %>%
  # 基于lag函数计算周新增确诊
  mutate(
    new_cases = confirmed - lag(confirmed, n = 7, order_by = date)
  ) %>%
  ungroup()

关键逻辑说明

  • 分组作用:group_by(country_region) 确保滞后值的计算完全在同一个区域的时间序列内完成,不会出现跨区域取数的错值。
  • lag() 正确配置规则:
    • n = 7 适配每日粒度的公开COVID数据集,代表取当前日期往前推7天的累计确诊值,刚好匹配“过去一周”的观测基准。
    • order_by = date 指定滞后计算的排序依据为日期,避免因数据集行顺序错乱取到非对应时间点的数值。
  • 差值计算逻辑:由于confirmed是累计型指标,通过当前值与7天前累计值做差,就能得到准确的周新增确诊数;数据集开头不足7天的行new_cases会自动返回NA,符合真实数据的业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 07:45:00