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
相关产品推荐
相关产品推荐

