R语言如何按自定义月度区间对时间序列数据进行分组处理
R语言自定义时间周期分组与筛选实现方案
首先默认使用tidyverse套件中的lubridate处理日期逻辑,dplyr做数据转换,可直接安装调用:
install.packages("tidyverse") library(tidyverse)
需求1:按「当月15日-次月14日归为后一个月」规则分组
核心逻辑:判断日期的日序,日序大于14的日期归属到下一个月,否则归属当前月,代码实现如下:
# 预处理:将时间列转为日期格式 df <- df %>% mutate(Timestamp = ymd(Timestamp)) # 生成归属月份并分组汇总 df_custom_month <- df %>% mutate( belong_month = case_when( day(Timestamp) > 14 ~ floor_date(Timestamp, "month") + months(1), TRUE ~ floor_date(Timestamp, "month") ) ) %>% # 按自定义月份、数据类型分组计算均值 group_by(belong_month, Data) %>% summarise(monthly_avg = mean(Value, na.rm = TRUE), .groups = "drop")
如果需要将归属月份展示为2020-01这类字符串格式,可在mutate中添加format(belong_month, "%Y-%m")进行转换。
需求2:筛选每月2-14日片段并归属对应月份
核心逻辑:先按日序筛选符合条件的行,直接取原日期所在月份作为归属月即可:
df_2to14 <- df %>% mutate(Timestamp = ymd(Timestamp)) %>% # 筛选每月2日到14日的数据 filter(day(Timestamp) %in% 2:14) %>% # 归属月份为原日期所在月份 mutate(belong_month = floor_date(Timestamp, "month")) %>% # 按需分组汇总 group_by(belong_month, Data) %>% summarise(period_avg = mean(Value, na.rm = TRUE), .groups = "drop")
内容的提问来源于stack exchange,提问作者Ummsen
相关产品推荐
相关产品推荐

