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

如何在R语言中将长格式数据转置为多列宽格式

在R语言中将长格式数据转换为宽格式

下面提供三种常用的实现方法,涵盖tidyverse工具、经典第三方包以及基础R函数:

方法一:使用tidyr包的pivot_wider()

pivot_wider()是tidyverse生态中专门用于长转宽的函数,语法直观易读:

# 先构造输入的长格式数据
long_data <- data.frame(
  Gen = c("G1", "G2", "G1", "G2", "G1", "G2", "G1", "G2"),
  traits = c("ph", "ph", "qp", "qp", "ser", "ser", "wer", "wer"),
  data = c(10, 14, 41, 14, 74, 47, 34, 25)
)

# 加载tidyr包(未安装则先运行install.packages("tidyr"))
library(tidyr)

# 转换为宽格式
wide_data <- pivot_wider(
  data = long_data,
  id_cols = Gen,          # 指定作为行标识的列
  names_from = traits,    # 指定要转为列名的列
  values_from = data      # 指定填充列值的列
)

print(wide_data)

输出结果:

Gen ph qp ser wer
1  G1 10 41  74  34
2  G2 14 14  47  25

方法二:使用reshape2包的dcast()

reshape2包的dcast()是经典的长转宽工具,语法简洁:

# 构造长格式数据(同方法一)
long_data <- data.frame(
  Gen = c("G1", "G2", "G1", "G2", "G1", "G2", "G1", "G2"),
  traits = c("ph", "ph", "qp", "qp", "ser", "ser", "wer", "wer"),
  data = c(10, 14, 41, 14, 74, 47, 34, 25)
)

# 加载reshape2包(未安装则先运行install.packages("reshape2"))
library(reshape2)

# 转换为宽格式
wide_data <- dcast(long_data, Gen ~ traits, value.var = "data")

print(wide_data)

输出结果与方法一完全一致。

方法三:使用基础R的reshape()函数

如果不想依赖第三方包,基础R内置的reshape()函数也能完成转换:

# 构造长格式数据(同方法一)
long_data <- data.frame(
  Gen = c("G1", "G2", "G1", "G2", "G1", "G2", "G1", "G2"),
  traits = c("ph", "ph", "qp", "qp", "ser", "ser", "wer", "wer"),
  data = c(10, 14, 41, 14, 74, 47, 34, 25)
)

# 转换为宽格式
wide_data <- reshape(
  long_data,
  idvar = "Gen",
  timevar = "traits",
  direction = "wide"
)

# 移除列名中的"data."前缀
colnames(wide_data) <- sub("data\\.", "", colnames(wide_data))

print(wide_data)

处理后同样得到目标宽格式数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:57:28