R语言中基于滚动时间窗口的可报告条件数据过滤方法问询
实现可报告条件的过滤步骤
假设你的数据集已经按**时间列(比如datetime)**升序排列,且PM_Condition是标记24小时滚动PM均值达标(>指定值)的布尔列,Wind_Condition是标记风向处于目标范围的布尔列(每行对应10分钟时长),可以按以下步骤操作:
1. 加载必要的包
确保你装了dplyr和slider(用来处理滚动窗口计算,比基础窗口函数更灵活):
library(dplyr) library(slider)
2. 计算滚动24小时内的风向达标累计时长
因为每行是10分钟数据,24小时对应144个数据点(24*6)。我们用滚动窗口统计Wind_Condition为TRUE的行数,再转换成小时:
df <- df %>% mutate( # 滚动24小时内风向达标的累计小时数 = 达标行数 * 10分钟 / 60 wind_hours = (slide_dbl(Wind_Condition, ~sum(.x), .before = 143, .complete = TRUE) * 10) / 60 )
.before = 143:表示当前行往前数143行,加上当前行一共144行(正好覆盖24小时).complete = TRUE:仅当窗口内凑满144行时才计算结果,避免开头不完整窗口的无效数据干扰
3. 生成Reportable Condition列
结合PM_Condition(24小时滚动PM均值达标)和wind_hours >=12两个条件,满足则设为1,否则0:
df <- df %>% mutate( `Reportable Condition` = ifelse(PM_Condition & (wind_hours >= 12), 1, 0) )
补充说明
- 如果你的
PM_Condition还没正确计算24小时滚动均值达标,可以用slider::slide_dbl先完成这一步:df <- df %>% mutate( pm_24h_avg = slide_dbl(pm_column, ~mean(.x), .before = 143, .complete = TRUE), PM_Condition = pm_24h_avg > 指定数值 ) - 若不想用
slider,也可以用dplyr配合tibbletime包的roll_sum函数实现,但slider的语法更直观易读。
内容的提问来源于stack exchange,提问作者Puneet Verma
相关产品推荐
相关产品推荐

