R语言如何统计指定观测点前滑动窗口内0值的出现次数
实现方案
不需要使用dplyr::count,slide_dbl传入自定义函数的参数是P列的向量片段,直接对向量做逻辑判断求和即可得到0值的出现次数,修改后的代码如下:
完整可运行代码
# 加载依赖包 library(tidyverse) library(slider) # 原始数据 event <- c("2020-03-25","2020-03-24","2020-03-23","2020-03-22","2020-03-21","2020-03-20","2020-03-19","2020-03-18","2020-03-17","2020-03-16","2020-03-15") P <- c(71,2,0,23.8,0,23.8,0,0,12,69,9) df <- data.frame(event,P) # 计算逻辑 df_result <- df %>% arrange(event) %>% # 按日期升序排列,保证时间窗口顺序正确 mutate( # 原有逻辑:前5天累计和 ACU_5d = slide_dbl(.x = P, .f = ~sum(.x), .before = 5, .after = -1), # 新增逻辑:前5天0值计数 zero_cnt_5d = slide_dbl(.x = P, .f = ~sum(.x == 0), .before = 5, .after = -1), # 仅保留P>60的对应结果 bar_5d = if_else(P > 60, ACU_5d, NA_real_), bar_zero_5d = if_else(P > 60, zero_cnt_5d, NA_real_) )
逻辑说明
sum(.x == 0)会先对窗口内的向量逐元素判断是否等于0,返回布尔值向量(TRUE/FALSE对应1/0),求和结果就是0值的出现次数,比调用count更简洁高效- 计算结果和你给出的示例一致:2020-03-25对应的
bar_zero_5d值为2,符合预期
内容的提问来源于stack exchange,提问作者Danilo Bandeira
相关产品推荐
相关产品推荐

