R中如何用tidy方法对多列转录本基因显著性数据进行汇总?
实现思路
你可以通过「宽表转长表」的思路统一处理所有模型列,无需手动逐个指定模型,核心逻辑如下:
- 把除转录本、基因ID外的所有模型判定列转为长格式,将模型名统一归集到同一列,判定结果归集到另一列
- 过滤出判定为显著(TRUE)的记录
- 按模型分组,分别统计转录本数量、去重后基因数量,再拼接对应的ID字符串即可
代码实现(基于tidyverse)
# 加载依赖包 library(tidyverse) # 可选步骤:修正原始数据中模型判定列为逻辑型,也可以直接过滤匹配字符串"TRUE" shared_clean <- shared %>% mutate(across(starts_with("model"), ~as.logical(.x))) # 汇总计算 result <- shared_clean %>% # 宽表转长表,所有模型列转为长格式,如果模型列名不是model开头,可以替换为cols = -c(transcript, gene) pivot_longer(cols = starts_with("model"), names_to = "model", values_to = "is_significant") %>% # 过滤显著的记录 filter(is_significant) %>% # 按模型分组汇总 group_by(model) %>% summarise( n_transcripts = n(), n_genes = n_distinct(gene), transcripts = paste(transcript, collapse = ";"), genes = paste(unique(gene), collapse = ";"), .groups = "drop" ) # 查看结果 print(result)
运行后输出的结果和你要求的格式完全一致:
# A tibble: 2 × 5 model n_transcripts n_genes transcripts genes <chr> <int> <int> <chr> <chr> 1 model1 7 2 t1;t2;t3;t7;t8;t9;t10 g1;g3 2 model2 7 2 t4;t5;t6;t7;t8;t9;t10 g2;g3
内容的提问来源于stack exchange,提问作者Sabrina Arif
相关产品推荐
相关产品推荐

