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

使用pivot_wider未获预期结果,求将Hugo_Symbol设为列的方法

解决方法

你想要把样本(sample_A/D)作为行、基因(Hugo_Symbol)作为列,但当前pivot_wider的用法方向搞反了——直接对宽格式的样本列做宽表转换,自然达不到预期。正确思路是先把数据转成长格式,再转成目标宽格式:

完整代码

library(tidyverse)

# 生成可复现的示例数据
set.seed(123)
df <- data.frame(Hugo_Symbol = paste0(rep("Gene", 10), seq(1,10)),
                 sample_A = runif(10),
                 sample_B = runif(10),
                 sample_C = runif(10),
                 sample_D = runif(10))

# 执行数据转换
df_transformed <- df %>%
  # 第一步:把所有样本列合并为长格式,拆分出样本名和对应数值
  pivot_longer(cols = starts_with("sample_"), 
               names_to = "sample", 
               values_to = "value") %>%
  # 第二步:以样本为行、基因为列,填充对应数值
  pivot_wider(names_from = Hugo_Symbol, 
              values_from = value)

# 查看转换结果
head(df_transformed)

代码说明

  • pivot_longer:将原数据中所有sample_开头的列,合并成sample(存储样本名称)和value(存储对应基因的数值)两列,把宽数据转成长数据,为后续转宽做铺垫。
  • pivot_wider:基于长数据,把每个Hugo_Symbol的基因作为列名,value作为列值,最终得到每行对应一个样本、每列对应一个基因的表格。

转换后结果示例

# A tibble: 4 × 11
  sample   Gene1  Gene2  Gene3  Gene4  Gene5  Gene6  Gene7  Gene8  Gene9 Gene10
  <chr>    <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 sample_A 0.288 0.788  0.409  0.883  0.940  0.0456 0.528  0.892  0.551  0.457
2 sample_B 0.945 0.0421 0.993  0.889  0.693  0.633  0.0940 0.964  0.902  0.691
3 sample_C 0.940 0.972  0.830  0.270  0.333  0.609  0.961  0.0898 0.729  0.640
4 sample_D 0.111 0.215  0.232  0.466  0.346  0.318  0.409  0.810  0.142  0.819

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:05:37