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

R语言实现药物靶点与患者癌症基因数据集匹配生成新数据集

R语言实现患者基因与药物靶点匹配方案

之前使用left_join未得到预期结果,核心原因是药物靶点数据集为宽格式(每列存储一个药物的所有靶点),不符合关联匹配要求的「键值一一对应」结构,先将靶点表转换为长格式再关联即可,完整实现流程如下:

步骤1:构造测试数据集

直接复现给出的两份测试数据,方便运行验证:

# 药物-靶点对应数据集
drug_target <- data.frame(
  docetaxel = c("AR", "CYP3A4", "ESR1", "NR3C1", "TACR2", "TDP1", "TP53", "TUBA1A", "TUBA1B"),
  carboplatin = c("ACVR1C", "ALDH1A1", "ALDH3A1", "ARFGEF1", "BAX", "NOTCH/MAST", "BCL2L12", "BIRC2", "BRCA1")
)

# 患者基因检测数据集
patient_gene <- data.frame(
  `Patient ID` = 1:10,
  Breastcancergenes = c("ESR1-CCDC170", "ESR1", "BCL2L14-ETV6", "ETV6-NTRK3", "MYB-NFIB", "NOTCH/MAST", "ESR1", "ESR1-CCDC170", "BCL2L14-ETV6", "MYB-NFIB"),
  check.names = FALSE
)

步骤2:转换靶点表格式

将宽格式的靶点表转换为每行存储「药物名-对应靶点」的长格式,这是匹配成功的核心步骤:

# 加载tidyverse工具包,未安装时先执行 install.packages("tidyverse")
library(tidyverse)

drug_target_long <- drug_target %>%
  pivot_longer(
    cols = everything(),
    names_to = "drug",
    values_to = "Breastcancergenes"
  )

转换后的长表结构示例:

drugBreastcancergenes
docetaxelAR
docetaxelCYP3A4
docetaxelESR1
carboplatinACVR1C
carboplatinNOTCH/MAST

步骤3:执行匹配

用左连接保留所有患者的记录,匹配不到对应靶点的行自动返回NA,最后调整列名和顺序符合预期格式:

match_result <- patient_gene %>%
  left_join(drug_target_long, by = "Breastcancergenes") %>%
  select(
    `patient id` = `Patient ID`,
    breastcancergenes = Breastcancergenes,
    drug
  )

结果说明

运行后得到的匹配结果如下,完全符合要求的逻辑:

patient idbreastcancergenesdrug
1ESR1-CCDC170NA
2ESR1docetaxel
3BCL2L14-ETV6NA
4ETV6-NTRK3NA
5MYB-NFIBNA
6NOTCH/MASTcarboplatin
7ESR1docetaxel
8ESR1-CCDC170NA
9BCL2L14-ETV6NA
10MYB-NFIBNA

补充:当前为精确字符串匹配,若需要实现模糊匹配(例如融合基因中包含靶点基因名即判定匹配),可以将关联逻辑替换为fuzzyjoin包的正则匹配,或用str_detect自定义判断规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:42:15