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

在R中合并日期列与对应息肉大小列并绘制折线图的方法

基于日期横轴的息肉大小折线图绘制方案

你的核心问题是未将日期列与对应息肉大小列关联,现有代码仅处理了大小数据,导致横轴只能显示S1-S5这类分类标签,而非实际日期值。以下是修正后的完整方案:

数据示例

IDd1d2d3d4d5s1s2s3s4s5
A1014152023571024

解决方案步骤

1. 整理数据为长格式(关联日期与大小)

推荐使用tidyr包的pivot_longer函数(当前tidyverse生态的推荐方法),也可以用reshape2的melt实现:

方法1:tidyr(推荐)
library(tidyr)
library(ggplot2)

# 将宽格式数据转换为长格式,匹配日期与对应大小
df_long <- df %>%
  # 处理日期列
  pivot_longer(cols = starts_with("d"), names_to = "time_tag", values_to = "date") %>%
  # 处理大小列
  pivot_longer(cols = starts_with("s"), names_to = "size_tag", values_to = "polyp_size") %>%
  # 匹配对应时间点(d1对应s1,以此类推)
  filter(substr(time_tag, 2, 2) == substr(size_tag, 2, 2)) %>%
  # 保留需要的列
  select(ID, date, polyp_size)
方法2:reshape2
library(reshape2)
library(ggplot2)

# 分别融化日期和大小列
df_dates <- melt(df, id.vars = "ID", measure.vars = c("D1","D2","D3","D4","D5"),
                 variable.name = "time_tag", value.name = "date")
df_sizes <- melt(df, id.vars = "ID", measure.vars = c("S1","S2","S3","S4","S5"),
                 variable.name = "size_tag", value.name = "polyp_size")

# 合并并匹配对应时间点
df_long <- cbind(df_dates, df_sizes$polyp_size)
colnames(df_long)[4] <- "polyp_size"

2. 绘制折线图

用整理后的长格式数据绘图,横轴即为实际日期值:

ggplot(df_long, aes(x = date, y = polyp_size, group = ID, colour = ID)) +
  geom_line(alpha = 0.1) +
  labs(x = "日期", y = "息肉大小(mm)") +
  ggtitle("不同日期的息肉大小(mm) (n=1973)") +
  guides(colour = FALSE)

说明

整理后的数据中,每一行对应一个患者的一个时间点(日期+息肉大小),ggplot可正确以日期为横轴绘制折线,直观反映息肉大小随实际日期的变化趋势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:46:01