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

R中按分组填充数据框缺失日期 优先用dplyr与管道实现

R语言按分组补全连续日期实现方案

实现逻辑

基于dplyr管道操作配合tidyr的补全函数实现,核心步骤为:

  • 先将日期字段转换为标准R语言Date类型,避免日期序列生成报错
  • 以name、code为分组键拆分数据
  • 对每个分组,生成分组内最小日期到最大日期的所有日度连续时间序列,自动补全缺失的日期行
  • 新增行的name、code自动继承分组值,usage、result字段填充为NA
  • 处理完成后取消分组,避免影响后续操作

完整可运行代码

# 加载依赖包
library(dplyr)
library(tidyr)

# --------------------
# 此处替换为你自己的数据读取代码
# 以下为匹配需求描述的测试样例数据
df <- tibble(
  name = c(rep("Jennifer Aniston",3), rep("Matthew Perry",2), rep("Lisa Kudrow",3)),
  code = c(rep("A001",3), rep("A002",2), rep("A003",3)),
  date = as.Date(c("2022-05-01","2022-05-02","2022-05-03",
                   "2022-10-01","2022-10-04",
                   "2022-01-02","2022-01-04","2022-01-06")),
  usage = c(12,15,9,20,18,7,11,6),
  result = c(89,92,78,85,90,72,88,75)
)
# --------------------

# 核心补全逻辑
df_completed <- df %>%
  mutate(date = as.Date(date)) %>% # 确保日期格式正确,已为Date类型可跳过
  group_by(name, code) %>%
  complete(
    date = seq.Date(min(date), max(date), by = "day"),
    fill = list(usage = NA_real_, result = NA_real_)
  ) %>%
  ungroup()

效果验证

运行代码后得到的结果完全匹配需求:

  • Jennifer Aniston(A001)组日期本身连续,行数无变化
  • Matthew Perry(A002)组自动补全2022-10-02、2022-10-03两行,对应usage、result为NA
  • Lisa Kudrow(A003)组自动补全2022-01-03、2022-01-05两行,对应usage、result为NA

注意事项

  • 若原始date字段为字符串格式,必须先执行as.Date()转换,否则无法生成正确的连续日期序列
  • fill参数中要匹配原字段类型指定NA类型:数值型字段用NA_real_,字符型字段用NA_character_,避免后续出现类型冲突
  • 处理完成后必须执行ungroup(),否则后续数据操作会保留分组逻辑,容易出现计算错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:09:41