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

如何在R中使用dplyr自动创建唯一Pixel列用于ggplot分组

R dplyr 自动生成唯一分组列实现时间序列绘图

你可以通过dplyr的分组序号函数cur_group_id()自动为每个唯一ID生成序号,再和变量名拼接得到Pixel列,完整实现逻辑如下:

完整实现代码

library(tidyverse)

# 构造示例数据
ID = c("279557", "279557", "280485", "280485")
Date = c("1/1/2020", "1/2/2020", "1/1/2020", "1/2/2020")
Var1 = c("1", "3", "5", "7")
Var2 = c("2", "4", "6", "8")
df = data.frame(ID, Date, Var1, Var2)

# 转长表+生成Pixel列
df_long <- df %>%
  # 转长表,指定变量名列名为name,值列为value
  pivot_longer(-c(ID, Date), names_to = "name", values_to = "Value") %>%
  # 按ID分组生成序号
  group_by(ID) %>%
  mutate(id_seq = paste0("ID", cur_group_id())) %>%
  ungroup() %>%
  # 拼接得到Pixel列
  mutate(Pixel = paste(id_seq, name, sep = ".")) %>%
  # 可选:调整列顺序匹配你需要的结构
  select(Pixel, ID, Date, Value, everything())

输出结果验证

运行上述代码后得到的df_long结构和预期一致:

# A tibble: 8 × 4
  Pixel   ID     Date     Value
  <chr>   <chr>  <chr>    <chr>
1 ID1.Var1 279557 1/1/2020 1    
2 ID1.Var2 279557 1/1/2020 2    
3 ID1.Var1 279557 1/2/2020 3    
4 ID1.Var2 279557 1/2/2020 4    
5 ID2.Var1 280485 1/1/2020 5    
6 ID2.Var2 280485 1/1/2020 6    
7 ID2.Var1 280485 1/2/2020 7    
8 ID2.Var2 280485 1/2/2020 8

绘图优化建议

后续绘图时建议先将Date列转为日期类型,避免X轴顺序混乱:

df_long$Date <- as.Date(df_long$Date, format = "%m/%d/%Y")

ggplot(data = df_long, aes(x= Date, y=Value, group = Pixel, color = Pixel)) +
  geom_line() + 
  xlab("日期")

内容的提问来源于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.26 21:54:03