如何将含重复行的Dataframe重塑为行名列名形式
重塑长格式DataFrame为宽格式(基因-样本矩阵)
你需要将包含重复基因和样本名的长格式数据转换为以基因为行、样本为列的宽格式矩阵,以下是两种高效实现的方法:
原始数据
geneSymbol <- c(rep("gene1",4),rep("gene2",4),rep("gene3",4)) Sample_name <- rep(c("sample1","sample2","sample3","sample4"),3) log2FC <- c(1.5,-1.0,0.5,0.2,-0.3,-0.7,-0.12,0.33,0.64,-0.17,2.3,-1.7) df <- data.frame(geneSymbol, Sample_name, log2FC)
预期输出
sample1 sample2 sample3 sample4 gene1 1.50 -1.00 0.50 0.20 gene2 -0.30 -0.70 -0.12 0.33 gene3 0.64 -0.17 2.30 -1.70
方法1:使用Base R的reshape()函数
无需额外安装包,直接用基础R函数实现:
wide_df <- reshape(df, idvar = "geneSymbol", timevar = "Sample_name", direction = "wide") # 移除列名中的"log2FC."前缀 colnames(wide_df) <- gsub("log2FC\\.", "", colnames(wide_df)) # 设置geneSymbol为行名并删除原列 rownames(wide_df) <- wide_df$geneSymbol wide_df <- wide_df[, -which(colnames(wide_df) == "geneSymbol")]
运行后得到的wide_df即为目标格式。
方法2:使用Tidyverse的pivot_wider()函数(推荐)
tidyverse的pivot_wider语法更直观,处理大规模数据效率更高:
先安装并加载包(首次使用需安装):
install.packages("tidyverse") library(tidyverse)
执行转换:
wide_df <- df %>% pivot_wider(names_from = Sample_name, values_from = log2FC) %>% column_to_rownames(var = "geneSymbol")
一行代码即可完成转换,直接得到符合预期的宽格式数据。
内容的提问来源于stack exchange,提问作者TJP
相关产品推荐
相关产品推荐

