You need to enable JavaScript to run this app. R语言中如何按省份补全数据框缺失日期并将对应车祸数填0
优惠活动
大模型
产品
解决方案
定价
更多

R语言中如何按省份补全数据框缺失日期并将对应车祸数填0

R 补全省份日期缺失行解决方案

原有代码问题梳理

  • 拼写错误:日期构造变量beign应为begin,分组字段PROVINCES和原数据字段PROVINCE不一致
  • 格式不匹配:原数据DATE列为字符串格式,构造的日期序列为Date类型,关联时无法匹配
  • 逻辑缺陷:仅按日期做全连接不会自动为每个省份补全所有日期,需要先生成「省份+日期」的全组合再做匹配

最优实现代码

可以直接用tidyr的complete函数,专门用于补全分组缺失行,代码非常简洁:

# 加载依赖包
library(dplyr)
library(tidyr)
library(lubridate) # 处理日期,也可以替换为base R的日期函数

# 一步完成格式转换、行补全、缺失值填充
result <- df %>%
  # 把字符串日期转成标准Date格式,对应格式为日/月/年
  mutate(DATE = dmy(DATE)) %>%
  # 补全每个省份在目标时间范围内的所有日期,缺失的车祸数填充为0
  complete(
    PROVINCE,
    DATE = seq.Date(from = dmy("01/03/2021"), to = dmy("05/03/2021"), by = "day"),
    fill = list(CAR_ACCIDENTS = 0)
  ) %>%
  # 可选:如果需要输出和原格式一致的字符串日期,转回对应格式
  mutate(DATE = format(DATE, "%d/%m/%y"))

运行验证

执行后result就是你需要的10行结果,和示例输出完全一致:

# A tibble: 10 × 3
   PROVINCE DATE    CAR_ACCIDENTS
   <chr>    <chr>           <dbl>
 1 AREQUIPA 01/03/21            3
 2 AREQUIPA 02/03/21            5
 3 AREQUIPA 03/03/21            3
 4 AREQUIPA 04/03/21            0
 5 AREQUIPA 05/03/21            2
 6 SANTA    01/03/21            1
 7 SANTA    02/03/21            2
 8 SANTA    03/03/21            0
 9 SANTA    04/03/21            1
10 SANTA    05/03/21            0

如果不想使用lubridate包,把日期转换部分替换为base R的as.Date指定格式即可:

# 替换日期转换逻辑,无需lubridate
mutate(DATE = as.Date(DATE, format = "%d/%m/%y"))
# 日期序列构造改为
DATE = seq.Date(from = as.Date("01/03/2021", format = "%d/%m/%Y"), to = as.Date("05/03/2021", format = "%d/%m/%Y"), by = "day")

内容的提问来源于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.09 11:12:03