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

在R中填充数据框月度日期间隔并校验ID时间完整性

填充缺失月度日期并验证时间序列完整性

针对你提供的月度日期数据框,以下是用R的tidyverse工具链实现日期填充和完整性检查的方案:

1. 加载依赖包

library(tidyverse)

2. 构造示例数据(你提供的代码)

Test = as.Date(c("2018-08-01", "2018-07-01", "2018-06-01", "2019-08-01","2018-08-01", "2018-07-01", "2018-06-01", "2019-08-01"))
ID = c(1,1,1,1,2,2,2,2)
x = data.frame(Test,ID)

3. 填充缺失的月度日期

按ID分组后,为每个ID生成从最早到最晚日期的完整月度序列,再与原数据左连接,自动补全缺失日期:

filled_x <- x %>%
  group_by(ID) %>%
  complete(Test = seq.Date(min(Test), max(Test), by = "month")) %>%
  ungroup()

处理后,每个ID的所有月度日期都会被保留,原数据中存在的日期会保留原记录,缺失的日期会新增行,若有其他列则对应位置显示NA。

4. 检查每个ID的时间区间是否完整

通过对比实际日期数量与理论应有的月度总数,判断每个ID的时间序列是否完整:

completeness_check <- filled_x %>%
  group_by(ID) %>%
  summarise(
    actual_dates = n(),
    expected_dates = interval(min(Test), max(Test)) %/% months(1) + 1,
    is_complete = actual_dates == expected_dates
  ) %>%
  ungroup()
  • actual_dates:每个ID实际拥有的日期行数
  • expected_dates:从该ID最早日期到最晚日期的总月度数(加1是因为包含首尾两个日期)
  • is_complete:布尔值,标记该ID的时间序列是否完整

结果说明

  • 运行filled_x可查看填充后的完整数据框,每个ID都会包含2018-06-01至2019-08-01的所有月度日期
  • 运行completeness_check会输出每个ID的完整性检查结果,示例数据处理后is_complete都会为TRUE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:30:57