如何在保留数据框完整性时检查基因列表是否存在于复杂格式列中
基因匹配问题解决方案(针对多分隔符列)
问题原因
你之前用%in%直接匹配失败,是因为数据框1的目标列每个元素是用//、///分隔的复合字符串,%in%只会匹配完整字符串,无法识别其中的单个基因条目。
方案1:给数据框2添加列,标记每个基因是否存在于数据框1中
先从数据框1的复合列里提取所有单个基因,再做匹配:
# 加载stringr包处理字符串 library(stringr) # 从数据框1目标列提取所有去重的单个基因 df1_all_genes <- GSE20069_GPL6246.character[,1] %>% str_replace_all("///", "//") %>% # 统一分隔符为// str_split("\\s*//\\s*") %>% # 按//拆分,忽略前后空格 unlist() %>% # 转为一维向量 unique() %>% # 去重 trimws() # 清除基因前后空格 # 给数据框2新增匹配结果列 gene.character$GSE20069_GPL6246 <- gene.character$list %in% df1_all_genes
方案2:给数据框1添加列,标记该行是否包含数据框2中的任意基因
如果需要保留数据框1的完整结构,同时标记每行是否有目标基因:
library(dplyr) library(stringr) # 提取数据框2的基因列表 target_genes <- gene.character$list %>% trimws() # 给数据框1新增匹配列 GSE20069_GPL6246.character <- GSE20069_GPL6246.character %>% mutate(has_target_gene = str_detect(.[,1], paste(target_genes, collapse = "|")))
内容的提问来源于stack exchange,提问作者driver
相关产品推荐
相关产品推荐

