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

R语言数据框分组按日期排序后对多变量连续4行计算统计量方法

R分组分段统计实现方案

你需要在原始分组逻辑的基础上,新增连续4行的子组标识,过滤有效子组后汇总即可,完整代码如下:

# 加载依赖
library(dplyr)
library(lubridate)

# 示例数据
test = data.frame(my_groups = c("A", "A", "A", "B", "B", "C", "C", "C",  "A", "A","A","A","A","A" , "C"),
                  measure1 = c(10:24),
                  measure2 = c(1:15),
                  time= c("20-09-2020", "25-09-2020", "19-09-2020", "20-05-2020", "20-06-2021", 
                          "11-01-2021", "13-01-2021", "13-01-2021", "15-01-2021", "15-01-2021",
                          "20-03-2021", "20-10-2021", "29-06-2021", "20-07-2021", "13-06-2021"))

# 核心处理逻辑
res <- test %>%
  # 转换为日期类型,保证时间排序正确
  mutate(time = dmy(time)) %>%
  # 按分组+时间升序排序
  arrange(my_groups, time) %>%
  # 按原始分组字段分组
  group_by(my_groups) %>%
  # 生成子组编号:每连续4行分配同一个编号
  mutate(sub_group = ceiling(row_number() / 4)) %>%
  # 按原始分组+子组进行二次分组
  group_by(my_groups, sub_group) %>%
  # 过滤行数不足4的子组,不需要该规则可直接删除此行
  filter(n() == 4) %>%
  # 汇总计算所需统计量
  summarise(
    measure1 = mean(measure1),
    measure2 = mean(measure2),
    time = max(time),
    .groups = "drop"
  ) %>%
  # 移除辅助计算的子组编号列
  select(-sub_group)

# 查看结果
print(res)

关键逻辑说明

  • 必须先将时间字段转换为日期类型,否则字符串格式的时间会按字符顺序排序,不符合实际时间先后逻辑
  • ceiling(row_number() / 4) 可以实现按行号每4行分配同一个子组编号,完全匹配连续4行分段的需求
  • 若需要保留不足4行的子组,直接删除filter(n() == 4)即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:45:03