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

按日期、子类别计算类别出现次数累计和及可视化实现

R语言数据分组累计求和实现

原始数据

df <- structure(list(Date_time = structure(c(1641025800, 1641025800, 
1641025800, 1641025800, 1641025800, 1641025800, 1641025800, 1641025800, 
1641027600, 1641027600, 1641027600, 1641027600, 1641027600, 1641027600, 
1641027600, 1641027600, 1641027600, 1641027600, 1641027600, 1641027600, 
1641027600, 1651396800, 1651396800, 1651396800, 1651396800, 1651396800, 
1651396800, 1651396800, 1651396800, 1651396800, 1651401000, 1651401000, 
1651401000, 1651401000, 1651401000, 1669966200, 1669966200, 1669966200, 
1669966200, 1669966200, 1669966200, 1669966200, 1669966200, 1669969800, 
1669969800, 1669969800, 1669969800, 1669969800, 1669969800, 1669969800, 
1669969800, 1669969800, 1669969800, 1669969800, 1669969800), class = c("POSIXct", 
"POSIXt"), tzone = "Europe/London"), Category = c("heat", "heat", 
"heat", "heat", "heat", "heat", "heat", "heat", "cold", "cold", 
"cold", "cold", "cold", "cold", "cold", "medium", "medium", "medium", 
"medium", "medium", "medium", "heat", "heat", "heat", "heat", 
"cold", "cold", "cold", "cold", "cold", "cold", "cold", "medium", 
"medium", "medium", "heat", "heat", "heat", "heat", "heat", "cold", 
"cold", "cold", "cold", "cold", "cold", "cold", "medium", "medium", 
"medium", "medium", "medium", "medium", "heat", "heat"), SubCat = c("r", 
"r", "r", "r", "n", "n", "n", "r", "r", "r", "r", "n", "n", "n", 
"n", "r", "r", "r", "n", "n", "n", "n", "n", "n", "r", "r", "r", 
"r", "n", "n", "n", "n", "r", "r", "r", "r", "r", "r", "n", "n", 
"n", "n", "n", "n", "r", "r", "r", "r", "n", "n", "r", "r", "r", 
"n", "n"), Site = c("1a", "1a", "1a", "1a", "1a", "1a", "1a", 
"1a", "1a", "1a", "1b", "1b", "1b", "1b", "1b", "1b", "1b", "1b", 
"1b", "1b", "1b", "2c", "2c", "2c", "2c", "2c", "2c", "2c", "2c", 
"2c", "2c", "2c", "2c", "2c", "2c", "7c", "7c", "7c", "7c", "7c", 
"7c", "7c", "7c", "7c", "7c", "7c", "7c", "7c", "7c", "7c", "7c", 
"7c", "7c", "7c", "7c")), row.names = c(NA, -55L), class = "data.frame")

需求

按日期、SubCat(可选包含Site)统计各Category的出现次数:先按日统计每组的当日总数,再将该数值逐日累加,最终得到可用于绘图的结构化数据(示例如下):

Date Category Subcategory Count
1  01/01/2022     Heat           r     5
2  01/01/2022     Cold           r     6
3  01/01/2022   Medium           r     9
4  01/01/2022     Heat           n     3
5  01/01/2022     Cold           n     6
6  01/01/2022   Medium           n    10
7  05/01/2022     Heat           r     3
8  05/01/2022     Cold           r     6
9  05/01/2022   Medium           r     9
10 05/01/2022     Heat           n     4
11 05/01/2022     Cold           n     8
12 05/01/2022   Medium           n    12
13 12/01/2022     Heat           r     3
14 12/01/2022     Cold           r     6
15 12/01/2022   Medium           r    10
16 12/01/2022     Heat           n     3
17 12/01/2022     Cold           n     3
18 12/01/2022   Medium           n     5

解决方案

使用dplyr和lubridate包实现,步骤如下:

1. 加载依赖包

library(dplyr)
library(lubridate)
library(stringr)

2. 基础分组累计求和(不含Site)

result <- df %>%
  # 提取日期并格式化,统一Category首字母大写,重命名列名匹配示例
  mutate(Date = format(date(Date_time), "%d/%m/%Y"),
         Category = str_to_title(Category),
         Subcategory = SubCat) %>%
  # 按日、分类、子分类统计当日数量
  group_by(Date, Category, Subcategory) %>%
  summarise(Daily_Count = n(), .groups = "drop") %>%
  # 按日期排序,保证累加顺序正确
  arrange(dmy(Date)) %>%
  # 按分类、子分类分组,计算累计求和
  group_by(Category, Subcategory) %>%
  mutate(Count = cumsum(Daily_Count)) %>%
  # 保留目标列并按日期排序输出
  select(Date, Category, Subcategory, Count) %>%
  arrange(dmy(Date))

3. 扩展分组累计求和(包含Site)

如果需要加入Site维度,修改分组逻辑即可:

result_with_site <- df %>%
  mutate(Date = format(date(Date_time), "%d/%m/%Y"),
         Category = str_to_title(Category),
         Subcategory = SubCat) %>%
  # 加入Site到分组条件
  group_by(Date, Category, Subcategory, Site) %>%
  summarise(Daily_Count = n(), .groups = "drop") %>%
  arrange(dmy(Date)) %>%
  group_by(Category, Subcategory, Site) %>%
  mutate(Count = cumsum(Daily_Count)) %>%
  select(Date, Category, Subcategory, Site, Count) %>%
  arrange(dmy(Date))

输出结果

运行上述代码后,result对象将生成与示例一致的结构化数据,可直接用于可视化绘图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:54:23