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

如何用R的purrr/dplyr优雅找出重复基因所属分组?

优雅识别差异基因分组中的跨组重复基因(dplyr/purrr实现)

针对你需要检测差异基因分组中跨组重复基因的需求,这里提供两种基于tidyverse工具链的简洁实现方案,替代繁琐的嵌套lapply:

方案一:dplyr + tidyr 纯tidy风格实现

这种方式通过将列表转换为结构化数据框,用分组统计快速定位重复基因:

library(dplyr)
library(tidyr)

# 处理基因分组列表,筛选出跨组重复的基因及其所属分组
duplicate_genes <- FocusedGenes %>%
  # 将列表转换为"分组-基因"的键值对数据框
  enframe(name = "group", value = "gene") %>%
  # 展开每个分组下的基因
  unnest(cols = gene) %>%
  # 按基因分组,筛选出出现在多个分组的基因
  group_by(gene) %>%
  filter(n() > 1) %>%
  # 将每个基因所属的分组合并为字符串
  summarise(所属分组 = paste(group, collapse = ", "), .groups = "drop")

# 查看结果
print(duplicate_genes)

输出示例:

# A tibble: 5 × 2
  gene    所属分组                         
  <chr>   <chr>                           
1 Atf4    ISR_Genes, Perk_Genes, Transcription_Genes
2 Ddit3   ISR_Genes, Transcription_Genes  
3 Nfe2l2  ISR_Genes, Perk_Genes, Transcription_Genes
4 Ptpn2   ISR_Genes, Perk_Genes, Transcription_Genes
5 Bok     ISR_Genes, Perk_Genes           

方案二:purrr 函数式风格实现

如果更倾向于函数式编程,用purrr可以直接构建基因到分组的映射:

library(purrr)
library(tibble)

# 构建每个基因对应的分组列表
gene_group_map <- imap(FocusedGenes, ~set_names(rep(.y, length(.x)), .x)) %>%
  reduce(c)

# 转换为数据框并筛选重复基因
duplicate_genes_purrr <- gene_group_map %>%
  enframe(name = "gene", value = "group") %>%
  group_by(gene) %>%
  filter(n() > 1) %>%
  summarise(所属分组 = paste(group, collapse = ", "), .groups = "drop")

额外:自动生成用户提醒

可以基于上述结果直接生成友好的冗余提示,无需手动拼接:

library(glue)

duplicate_genes %>%
  rowwise() %>%
  walk(~message(glue("警告:基因 {.x$gene} 同时属于分组 {.x$所属分组},存在分组冗余")))

输出的提示信息会直接在控制台打印,方便用户快速定位问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:57:23