使用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
相关产品推荐
相关产品推荐

