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

