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" )
转换后的长表结构示例:
| drug | Breastcancergenes |
|---|---|
| docetaxel | AR |
| docetaxel | CYP3A4 |
| docetaxel | ESR1 |
| carboplatin | ACVR1C |
| carboplatin | NOTCH/MAST |
步骤3:执行匹配
用左连接保留所有患者的记录,匹配不到对应靶点的行自动返回NA,最后调整列名和顺序符合预期格式:
match_result <- patient_gene %>% left_join(drug_target_long, by = "Breastcancergenes") %>% select( `patient id` = `Patient ID`, breastcancergenes = Breastcancergenes, drug )
结果说明
运行后得到的匹配结果如下,完全符合要求的逻辑:
| patient id | breastcancergenes | drug |
|---|---|---|
| 1 | ESR1-CCDC170 | NA |
| 2 | ESR1 | docetaxel |
| 3 | BCL2L14-ETV6 | NA |
| 4 | ETV6-NTRK3 | NA |
| 5 | MYB-NFIB | NA |
| 6 | NOTCH/MAST | carboplatin |
| 7 | ESR1 | docetaxel |
| 8 | ESR1-CCDC170 | NA |
| 9 | BCL2L14-ETV6 | NA |
| 10 | MYB-NFIB | NA |
补充:当前为精确字符串匹配,若需要实现模糊匹配(例如融合基因中包含靶点基因名即判定匹配),可以将关联逻辑替换为
fuzzyjoin包的正则匹配,或用str_detect自定义判断规则。
内容的提问来源于stack exchange,提问作者Dimitris Karditsas
相关产品推荐
相关产品推荐

