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

在R中重构JHU疫情时间序列数据框 实现分国家日新增病例统计

解决方法

JHU疫情仓库的原始数据为累计确诊数,你现有代码输出的是各国每日累计值,只需增加按国家分组差分的逻辑即可得到日新增数据,调整后的完整代码如下:

library(dplyr)
library(tidyr)
library(lubridate)

result <- originaldf %>%
  # 剔除不需要的经纬度列
  select(-c(Lat, Long)) %>%
  # 宽表转换为长表
  pivot_longer(cols = -`Country/Region`, names_to = 'Date', values_to = 'Cases') %>%
  # 按国家、日期聚合,处理同一国家多行政区的累计数据
  group_by(`Country/Region`, Date = mdy(Date)) %>%
  summarise(Cumulative_Cases = sum(Cases, na.rm = TRUE), .groups = 'drop') %>%
  # 按国家单独分组,按日期升序排序
  group_by(`Country/Region`) %>%
  arrange(Date, .by_group = TRUE) %>%
  # 计算日新增:当日累计减去前一日累计,首日新增默认取当日累计值
  mutate(Cases = Cumulative_Cases - lag(Cumulative_Cases, n = 1, default = 0)) %>%
  # 可选步骤:处理数据回溯修正导致的新增为负的异常,不需要可删除
  mutate(Cases = pmax(Cases, 0)) %>%
  # 保留最终需要的字段
  select(`Country/Region`, Date, Cases) %>%
  ungroup()

关键逻辑说明

  • 先聚合得到各国每日累计确诊数,避免直接差分导致多行政区数据计算错误
  • 仅按国家分组后做日期排序,保证差分计算是同一个国家不同日期的数值相减
  • lag()函数的default = 0参数保证每个国家第一天的新增值计算正确
  • 可选的pmax(Cases, 0)用来过滤官方数据修正产生的负新增值,如需要保留原始修正结果可删除该行

内容的提问来源于stack exchange,提问作者José Carlos Rojas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:18:03