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

R语言按日期区间匹配读数 重叠区间取日度平均值

数据示例图

R语言实现日度读数匹配(区间衔接点自动取均值)

实现思路

逻辑不需要复杂判断,兼容性强:

  • 先拆分原始数据为两部分:有效区间表(过滤掉Start Date为空的无效行,保留起止日期、读数字段)、待计算日度日期表(提取所有非空的Daily Date)
  • 对每一个日度日期,匹配所有满足 Start Date ≤ 当日日期 ≤ End Date 的区间记录
  • 对匹配到的所有Reading值求平均值:
    • 日期落在单个区间内部时,只会匹配到1个Reading,平均值就是该读数本身
    • 日期恰好处于两个区间衔接点时(既是前一区间结束日、也是后一区间开始日),会匹配到2个Reading,平均值自动为两个读数的均值
  • 该逻辑兼容任意长度的读数周期,且不需要依赖reading period字段,直接通过起止日期判断覆盖关系,可避免周期值记录错误导致的结果偏差。

完整代码

# 加载dplyr包做数据处理,第一次运行请先执行 install.packages("dplyr")
library(dplyr)

# 读取你的数据,这里直接用你提供的示例数据做演示
df <- structure(list(`Start Date` = structure(c(1193961600, 1194134400, 
1194307200, 1194480000, NA, NA, NA, NA, NA, NA, NA), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), `End Date` = structure(c(1194134400, 
1194307200, 1194480000, 1194998400, NA, NA, NA, NA, NA, NA, NA
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), Reading = c(3, 
4, 3.5, 2, NA, NA, NA, NA, NA, NA, NA), `reading period` = c(2, 
2, 2, 6, NA, NA, NA, NA, NA, NA, NA), `Daily Date` = structure(c(1194048000, 
1194134400, 1194220800, 1194307200, 1194393600, 1194480000, 1194566400, 
1194652800, 1194739200, 1194825600, 1194912000), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), `Daily reading` = c(3, 3.5, 4, 3.75, 
3.5, 2.75, 2, 2, 2, 2, 2)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -11L))

# 提取有效区间数据
interval_df <- df %>% 
  filter(!is.na(`Start Date`)) %>% 
  select(`Start Date`, `End Date`, Reading)

# 提取待计算的所有日度日期
daily_df <- df %>% 
  filter(!is.na(`Daily Date`)) %>% 
  select(`Daily Date`)

# 逐行计算日度读数
result <- daily_df %>%
  rowwise() %>%
  mutate(`Daily reading` = mean(
    interval_df$Reading[
      interval_df$`Start Date` <= `Daily Date` & 
      interval_df$`End Date` >= `Daily Date`
    ]
  )) %>%
  ungroup()

# 打印结果,可直接和示例的Daily reading列核对
print(result)

结果说明

运行代码后得到的结果和示例给出的预期值完全一致:

  • 单区间覆盖的日期(如2007-11-02、2007-11-04等)直接返回对应区间的读数
  • 区间衔接点日期(如2007-11-03、2007-11-05、2007-11-07)自动返回前后两个区间读数的平均值
  • 长度为6天的长周期区间覆盖的所有内部日期,都正确返回对应读数2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:36:27