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

R语言时间序列处理:筛选有效小时值≥15的日期数据

小时级时间序列按自然日有效数据量筛选方案

需求说明

  • 针对小时粒度时间序列数据,按自然日维度统计每日有效小时值数量
  • 筛选规则:单日有效小时值数量大于15则保留该日全部数据,不足15则剔除该日所有数据
  • 示例测试数据如下:
{ 
ts <- seq(as.POSIXct("2015-08-06 12:00"), as.POSIXct("2015-08-21 17:30"), by='60 min')
x1<-sample(c(NA,1,4,5),366,replace=TRUE)
DF <- data.frame(ts, x1)
}

注:以下方案默认「有效小时值」指观测值x1非缺失的记录,若你的有效判定规则有调整,修改对应判断条件即可。

实现方案

方案1:Base R实现(无需安装额外依赖)

# 给每条记录添加所属自然日标签
DF$date_col <- as.Date(DF$ts)

# 按自然日分组,统计每日非缺失的有效记录数
daily_stat <- aggregate(
  x = list(valid_num = DF$x1),
  by = list(date = DF$date_col),
  FUN = function(vec) sum(!is.na(vec)),
  na.action = NULL
)

# 提取符合有效数量要求的日期
target_dates <- daily_stat$date[daily_stat$valid_num > 15]

# 筛选最终结果,删除临时生成的日期列
final_df <- DF[DF$date_col %in% target_dates, c("ts", "x1")]

方案2:dplyr实现(语法更简洁)

如果已安装tidyverse/dplyr包,可以用以下更简洁的写法:

library(dplyr)

final_df <- DF %>%
  mutate(date_col = as.Date(ts)) %>%
  group_by(date_col) %>%
  filter(sum(!is.na(x1)) > 15) %>%
  ungroup() %>%
  select(-date_col)

结果校验

运行以下命令可以快速查看结果中每个自然日的记录条数,确认筛选逻辑符合预期:

table(as.Date(final_df$ts))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:42:31