如何筛选两列DataFrame中反向重复的基因对?
移除DataFrame中的反向重复基因对
下面提供两种高效的解决方法,适用于处理无序基因对的重复问题:
方法1:使用dplyr包(简洁直观)
利用pmin和pmax对每行的基因对进行排序,再基于排序后的结果去重:
library(dplyr) # 生成唯一无序基因对 unique_pairs <- all_pairs %>% mutate( # 对每行的两个基因按字母顺序排序 gene_sorted1 = pmin(gene1, gene2), gene_sorted2 = pmax(gene1, gene2) ) %>% # 保留唯一的排序后基因对,同时保留原数据列 distinct(gene_sorted1, gene_sorted2, .keep_all = TRUE) %>% # 恢复原列结构 select(gene1, gene2)
方法2:使用基础R(无需额外依赖)
通过apply对每行基因排序,再用duplicated筛选唯一行:
# 对每行的基因对进行排序,生成矩阵 sorted_pairs <- t(apply(all_pairs, 1, sort)) # 筛选出非重复的行索引 unique_rows <- !duplicated(sorted_pairs) # 提取唯一的基因对 unique_pairs <- all_pairs[unique_rows, ]
原理说明
两种方法的核心逻辑一致:将无序的反向基因对转换为完全相同的有序对(比如(BICRA, ASXL1)和(ASXL1, BICRA)排序后均为(ASXL1, BICRA)),再通过去重操作保留每组反向对中的唯一一行。自身配对(如(ASXL1, ASXL1))会被保留,因为排序后不会产生重复。
内容的提问来源于stack exchange,提问作者Ishan Mehta
相关产品推荐
相关产品推荐

