多日期场景下按30秒间隔计算温度平均值的代码优化需求
解决跨日期汇总30秒间隔温度平均值的问题
你的核心问题是分组时未包含日期维度,导致不同日期的同一时间段数据被合并计算。以下是两种直接的修复方案:
方案一:在原有逻辑基础上添加日期分组
从datetime字段提取日期,将其加入分组键,确保每天的时间段独立计算:
library(data.table) library(lubridate) df_sum <- df[, # 新增日期字段,同时保留原有时分秒拆分 c('Date', 'Hour', 'Minute', 'Second') := .(as.Date(datetime), data.table::hour(datetime), minute(datetime), second(datetime)) ][, second_Cut := cut(Second, breaks = c(0,30,60), include.lowest = TRUE) # 分组时加入Date,同时用na.rm处理数据缺失 ][, .(Avg = mean(CorTemp, na.rm = TRUE)), .(Date, Hour, Minute, second_Cut)]
方案二:更简洁的时间间隔分组(推荐)
不用手动拆分时分秒,直接用floor_date将datetime向下取整到30秒间隔,自动包含日期信息,逻辑更清晰:
library(data.table) library(lubridate) df_sum <- df[, # 生成30秒间隔的时间标记(如2024-05-20 10:30:00、2024-05-20 10:30:30) time_interval := floor_date(datetime, "30 seconds") # 按时间间隔分组计算平均值,na.rm处理缺失值 ][, .(Avg = mean(CorTemp, na.rm = TRUE)), by = time_interval]
补充说明
- 两种方案都加入了
na.rm = TRUE,用于处理数据缺失的情况,避免因单个缺失值导致整个时间段的平均值为NA; - 方案二的输出结果会以完整的时间间隔(含日期)作为分组键,更便于后续的时间序列分析。
内容的提问来源于stack exchange,提问作者JMc
相关产品推荐
相关产品推荐

