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

如何将R语言中两个宽格式DataFrame重塑为长格式以用于ggplot绘图?

如何将两个宽格式DataFrame重塑为适配ggplot的长格式?

原始数据

你提供的两个宽格式DataFrame构建代码如下:

# df1(包含B系列数据)
Name <- c("ST01","ST02","ST03")
B1 <- c(0.01,0.003,0.04)
B2 <- c(0.02,0.002,0.02)
B3 <- c(0.04,0.008,0.06)
B4 <- c(0.08,0.009,0.08)
B5 <- c(0.09,0.004,0.05)
df1 <- data.frame(Name,B1,B2,B3,B4,B5)

# df2(包含A系列数据)
Name <- c("ST01","ST02","ST03")
A1 <- c(0.02,0.036,0.14)
A2 <- c(0.04,0.034,0.32)
A3 <- c(0.05,0.054,0.56)
A4 <- c(0.06,0.034,0.78)
A5 <- c(0.08,0.24,0.59)
df2 <- data.frame(Name,A1,A2,A3,A4,A5)

解决方案:重塑为长格式并合并

使用tidyverse工具包(包含dplyr和tidyr)可以高效完成数据重塑,这也是适配ggplot2的标准方式:

# 加载工具包
library(tidyverse)

# 将df1转为长格式(提取B系列的数值和对应编号)
df1_long <- df1 %>%
  pivot_longer(
    cols = starts_with("B"),  # 选择所有以B开头的列
    names_to = "Value",       # 列名转为Value列
    values_to = "B"           # 列值转为B列
  ) %>%
  mutate(Value = str_remove(Value, "B") %>% as.integer())  # 去掉B前缀,转成整数编号

# 将df2转为长格式(提取A系列的数值和对应编号)
df2_long <- df2 %>%
  pivot_longer(
    cols = starts_with("A"),
    names_to = "Value",
    values_to = "A"
  ) %>%
  mutate(Value = str_remove(Value, "A") %>% as.integer())

# 按Name和Value合并两个长格式数据框
merged_df <- inner_join(df1_long, df2_long, by = c("Name", "Value"))

# 查看最终结果
print(merged_df)

运行后会得到你期望的格式:

Name Value     A     B
1  ST01     1 0.020 0.010
2  ST01     2 0.040 0.020
3  ST01     3 0.050 0.040
4  ST01     4 0.060 0.080
5  ST01     5 0.080 0.090
6  ST02     1 0.036 0.003
7  ST02     2 0.034 0.002
8  ST02     3 0.054 0.008
9  ST02     4 0.034 0.009
10 ST02     5 0.240 0.004
11 ST03     1 0.140 0.040
12 ST03     2 0.320 0.020
13 ST03     3 0.560 0.060
14 ST03     4 0.780 0.080
15 ST03     5 0.590 0.050

适配ggplot的绘图示例

1. 所有A与B的整体关系散点图

ggplot(merged_df, aes(x = A, y = B)) +
  geom_point(size = 2) +
  labs(title = "A与B的整体关系", x = "A值", y = "B值") +
  theme_minimal()

2. 按Value分组的A与B关系图(分面展示)

ggplot(merged_df, aes(x = A, y = B)) +
  geom_point(size = 2) +
  labs(title = "按Value分组的A与B关系", x = "A值", y = "B值") +
  theme_minimal() +
  facet_wrap(~Value)  # 每个Value单独成图

这种长格式是ggplot2最适配的整洁数据格式:每个变量占一列,每个观测占一行,完全满足你的绘图需求。

内容的提问来源于stack exchange,提问作者Peter.2055

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:28:07