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

如何将含重复行的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:45:11