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

