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

R语言按唯一ID分组汇总每日时间序列并使用ggplot绘制折线图的方法

R实现按ID汇总时间序列数据并绘制ggplot折线图

原代码存在的问题

  • 构造数据时Var1、Var2被定义为字符型,无法直接用于数值计算与绘图
  • 日期字段存在笔误1/7/202,缺少年份最后一位,转换日期格式时会生成NA值
  • 未完成按ID分组的汇总步骤,直接绘图会出现分组逻辑错误

完整实现代码

library(tidyverse)
library(lubridate)

# 修正后的数据
ID = c("297557", "279557","297557", "279557","297557", "279557",
       "297557", "279557","297557", "279557","280485", "280485","280485", "280485",
       "280485", "280485","280485", "280485","280485", "280485")

Date = c("1/1/2020", "1/2/2020", "1/3/2020", "1/4/2020",
         "1/5/2020", "1/6/2020", "1/7/2020", "1/8/2020", "1/9/2020", "1/10/2020",
         "1/1/2020", "1/2/2020", "1/3/2020", "1/4/2020",
         "1/5/2020", "1/6/2020", "1/7/2020", "1/8/2020", "1/9/2020", "1/10/2020")

# 修正为数值型
Var1 = c(1, 3, 5, 7, 9, 11, 13, 15, 17, 19)
Var2 = c(2, 4, 6, 8, 10, 12, 14, 16, 18, 20) 

# 数据预处理
df = data.frame(ID, Date, Var1, Var2) %>%
  pivot_longer(-c(ID, Date), values_to = "value") %>%
  # 转换日期格式
  mutate(Date = as.Date(Date, format = "%m/%d/%Y"),
         Month = month(Date, label = TRUE, abbr=FALSE))

# 按ID+月份汇总,可根据需求替换sum为mean、max等汇总函数
df_summary <- df %>%
  group_by(ID, Month) %>%
  summarise(total_value = sum(value), .groups = "drop")

# 绘制折线图
ggplot(data = df_summary, aes(x= Month, y=total_value, group = ID, color = ID)) +
  geom_line(linewidth = 1) + 
  labs(x = NULL, y = "汇总后数值", color = "ID编号") +
  theme_minimal()

代码说明

  • 汇总逻辑可根据业务需求调整:如果需要按每日维度汇总,将group_by(ID, Month)改为group_by(ID, Date),x轴映射改为Date即可
  • 折线的颜色、粗细等样式可通过geom_line的参数自定义,也可以加geom_point叠加数据点提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:24:06