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

R语言如何提取数据框日期区间内的缺失测量日期

解决方案

首先修正你的原始数据框(原代码中datas_faltantes未定义,先移除该列):

amostra_coc02 <- c("AI-0006-LT01-T1-1", "AI-0006-LT01-T1-1")
equipamento_coc02 <- c("FZ-001-CP", "FZ-001-CP")
data_coc02 <- c("2022-06-09", "2022-06-09")
data_coc03 <- c("2022-06-13", "2022-06-13")
data_medicao <- c("2022-06-11", "2022-06-12")
temperatura <- c("-28", "-29")

df <- data.frame(amostra_coc02, equipamento_coc02, data_coc02, data_coc03, data_medicao, temperatura)

使用dplyr和lubridate包实现需求,核心逻辑是按样本/设备分组,生成区间内完整日期序列后筛选缺失日期:

library(dplyr)
library(lubridate)

df_resultado <- df %>%
  # 将字符型日期转换为Date类型
  mutate(across(c(data_coc02, data_coc03, data_medicao), ymd)) %>%
  # 按样本和设备分组,适配多条独立记录
  group_by(amostra_coc02, equipamento_coc02) %>%
  mutate(
    # 生成data_coc02到data_coc03的完整日期序列
    datas_completas = list(seq(min(data_coc02), max(data_coc03), by = "day")),
    # 提取完整序列中未出现在data_medicao的日期
    datas_faltantes = list(setdiff(datas_completas[[1]], data_medicao))
  ) %>%
  # 可选:将日期向量转为逗号分隔的字符串,便于查看
  mutate(datas_faltantes_str = paste(datas_faltantes[[1]], collapse = ", ")) %>%
  ungroup()

核心要点

  • 必须将日期列转为Date类型,否则无法进行日期序列生成和集合运算。
  • 分组操作确保不同样本/设备的记录独立计算各自的缺失日期。
  • setdiff()函数精准提取完整日期序列与已测量日期的差集,即缺失日期。

运行后,datas_faltantes列存储每组的缺失日期向量,datas_faltantes_str为格式化后的字符串,你会得到目标缺失日期:2022-06-09、2022-06-10、2022-06-13。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:13:38