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

如何将宽格式数据转换为长格式以绘制折线图?

宽格式转长格式并绘制折线图

以下是用R语言处理宽转长并绘制折线图的完整流程,适配你的数据(含缺失值):

1. 加载工具包

首先加载tidyverse,它包含了数据转换和绘图所需的核心函数:

library(tidyverse)

2. 导入数据

先将你提供的数据转换成R可识别的数据框(如果数据来自外部文件,用read.csv()或read.table()读取即可):

df <- data.frame(
  Participant = c("P03", "P04", "P05", "P07"),
  Day.1 = c(2330, 2330, 4580, 2340),
  Day.2 = c(2290, 2300, 2200, 2300),
  Day.3 = c(2340, 2340, 2210, 2340),
  Day.4 = c(3820, 2340, 2210, 2220),
  Day.5 = c(3740, 2340, 2230, 2300),
  Day.6 = c(2260, 2340, 2260, 2340),
  Day.7 = c(2340, NA, 2210, 2250),
  Day.8 = c(2300, NA, 2340, 2340),
  Day.9 = c(2270, NA, 2260, 2340),
  Day.10 = c(2300, NA, 2340, 2340),
  Day.11 = c(2340, NA, 2150, 2340),
  Day.12 = c(2340, NA, 2010, 2340),
  Day.13 = c(2220, NA, 2260, 2340),
  Day.14 = c(2260, NA, 2280, 2340),
  Day.15 = c(2340, NA, 2230, 2340),
  Day.16 = c(2340, NA, 2330, 2340),
  Day.17 = c(NA, NA, 320, 2340),
  Day.18 = c(NA, NA, 2180, 2340),
  Day.19 = c(NA, NA, 2340, 2300),
  Day.20 = c(NA, NA, 2340, 2340),
  Day.21 = c(NA, NA, 2220, 2340),
  Day.22 = c(NA, NA, NA, 2340),
  Day.23 = c(NA, NA, NA, 2300),
  Day.24 = c(NA, NA, NA, 2300),
  Day.25 = c(NA, NA, NA, 2340),
  Day.26 = c(NA, NA, NA, 2340),
  Day.27 = c(NA, NA, NA, 2300),
  Day.28 = c(NA, NA, NA, 2340)
)

3. 宽格式转长格式

用pivot_longer()完成格式转换,同时提取Day.X中的数字作为数值型的days列:

long_df <- df %>%
  pivot_longer(
    cols = starts_with("Day."),  # 选中所有Day.开头的列
    names_to = "days",           # 原列名存入days列
    values_to = "score",         # 原列值存入score列
    values_drop_na = FALSE       # 保留缺失值(默认也是FALSE,可省略)
  ) %>%
  mutate(days = parse_number(days))  # 提取天数数字并转为数值型

转换后每行对应一个参与者某一天的得分,缺失值NA会被保留,后续绘图时会自动跳过这些点。

4. 绘制折线图

用ggplot2绘制,每个参与者用不同颜色区分:

ggplot(long_df, aes(x = days, y = score, color = Participant)) +
  geom_line(linewidth = 1) +
  labs(
    x = "天数",
    y = "得分",
    title = "各参与者每日得分变化",
    color = "参与者"
  ) +
  theme_minimal()

关键说明

  • 缺失值处理:geom_line()默认会忽略NA,不会在缺失处绘制折线,如果你想让折线在缺失位置断开,保持默认即可;若需要填充缺失值,可以用dplyr::fill()或tidyr::replace_na()处理。
  • 若使用Python,逻辑类似:用pd.melt()转长格式,再用matplotlib/seaborn绘图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:55:15