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

如何将R中以/分隔的基因ID替换为对应基因符号?

斜杠分隔基因ID转基因符号的R实现

示例数据准备

先定义输入的基因ID向量和映射数据框:

geneIDs <- c("100/1000/100008586","1277/63923/8516","1133/1132/1956/8516")

gene_symbols <- data.frame(
  ENTREZID = c(1, 10, 100, 1000, 10000, 100008586, 1277, 63923, 8516, 1133, 1132, 1956),
  SYMBOL = c("A1BG", "NAT2", "ADA", "CDH2", "AKT3", "GAGE12F", "RAF1", "FOXP2", "CXCR4", "CSF1R", "CSF1", "JUN")
)

核心处理步骤

  1. 统一ID格式:将映射表中的ENTREZID转为字符型,避免大数字因科学计数导致匹配失败:
gene_symbols$ENTREZID <- as.character(gene_symbols$ENTREZID)
  1. 自定义转换函数:实现拆分ID、匹配符号、重新合并的逻辑:
convert_gene_ids <- function(id_str, mapping) {
  # 拆分斜杠分隔的ID
  ids <- strsplit(id_str, "/")[[1]]
  # 匹配对应的基因符号
  symbols <- mapping$SYMBOL[match(ids, mapping$ENTREZID)]
  # 可选:将未匹配的ID保留原值,避免出现NA
  symbols[is.na(symbols)] <- ids[is.na(symbols)]
  # 重新合并为斜杠分隔的字符串
  paste(symbols, collapse = "/")
}
  1. 批量转换:将函数应用到整个基因ID向量:
geneSymbols <- sapply(geneIDs, convert_gene_ids, mapping = gene_symbols)

# 查看结果
geneSymbols

运行后输出:

#> "ADA/CDH2/GAGE12F" "RAF1/FOXP2/CXCR4" "CSF1R/CSF1/JUN/CXCR4"

Tidyverse风格实现(适合数据框列处理)

如果是处理数据框中的列,用tidyverse工具链更便捷:

library(tidyverse)

df <- tibble(geneIDs = geneIDs)

df_processed <- df %>%
  mutate(
    geneSymbols = str_split(geneIDs, "/") %>%
      map(~ gene_symbols$SYMBOL[match(.x, gene_symbols$ENTREZID)]) %>%
      map_chr(paste, collapse = "/")
  )

print(df_processed)

输出结果:

#> # A tibble: 3 × 2
#>   geneIDs                  geneSymbols          
#>   <chr>                    <chr>                
#> 1 100/1000/100008586       ADA/CDH2/GAGE12F     
#> 2 1277/63923/8516          RAF1/FOXP2/CXCR4     
#> 3 1133/1132/1956/8516      CSF1R/CSF1/JUN/CXCR4

内容的提问来源于stack exchange,提问作者Victor Hugo Calegari de Toledo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:45:33