在R中如何计算tibble格式时间序列数据的连续7天最大值
实现方法
你需要用到tidyverse、lubridate(处理时间格式)和slider(实现按时间滑动窗口计算)包,具体代码如下:
- 安装并加载依赖包
# 未安装的话先执行安装 # install.packages(c("tidyverse", "lubridate", "slider")) library(tidyverse) library(lubridate) library(slider)
- 构造测试数据(你可以替换为自己的tibble数据)
df <- tibble( time = ymd_hms(c("2015-01-08 12:30:00", "2015-01-08 13:00:00", "2015-01-11 14:00:00", "2015-01-11 15:00:00", "2015-02-04 12:30:00", "2015-02-04 13:00:00")), DOY = c(8,8,11,11,35,35), Value = c(0.664, 0.647, 0.669, 0.644, 0.664, 0.647) )
- 计算连续7天窗口的Max值
你示例中的Max值为窗口内Value最大值对应的DOY加该Value,对应实现代码:
result <- df %>% arrange(time) %>% # 必须先按时间升序排序,保证滑动窗口逻辑正确 mutate(Max = slide_index_dbl( .x = cur_data(), .i = time, # 以time列为滑动的时间索引 .f = ~{ max_idx <- which.max(.x$Value) .x$DOY[max_idx] + .x$Value[max_idx] }, .after = days(7) # 窗口范围为当前时间到之后7天内的所有观测,可按需调整 ))
参数调整说明
- 若需要计算当前时间往前7天的窗口,把
.after = days(7)替换为.before = days(7) - 若需要计算以当前时间为中心的7天窗口,可同时设置
.before = days(3.5), .after = days(3.5) - 若仅需要窗口内的Value最大值,把
.f函数内容修改为max(.x$Value)即可
内容的提问来源于stack exchange,提问作者Heiwa
相关产品推荐
相关产品推荐

