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

基于Base R去除互为反向的重复基因对行(禁用tidyverse)

问题描述

我正在使用Base R操作(禁止使用tidyverse),现有如下数据:

> geneA  
[1] "GNG7"  "GNG7"  "GNG7"  "GNG12" "GNG12" "GNG12" "GNG2"  "GNG2"  "GNG2"  
[10] "GNG5"  "GNG5"  "GNG5" 

> geneB  
 [1] "GNG12" "GNG5"  "GNG2"  "GNG7"  "GNG5"  "GNG2"  "GNG5"  "GNG12" "GNG7"  
[10] "GNG12" "GNG7"  "GNG2" 

处理后得到数据框GNGdata:

> GNGdata
    geneA geneB  GENE_PAIR  
1  GNG7 GNG12 GNG7;GNG12  
2  GNG7  GNG5  GNG7;GNG5  
3  GNG7  GNG2  GNG7;GNG2  
4 GNG12  GNG7 GNG12;GNG7  
5 GNG12  GNG5 GNG12;GNG5  
6 GNG12  GNG2 GNG12;GNG2  
7  GNG2  GNG5  GNG2;GNG5  
8  GNG2 GNG12 GNG2;GNG12  
9  GNG2  GNG7  GNG2;GNG7  
10  GNG5 GNG12 GNG5;GNG12  
11  GNG5  GNG7  GNG5;GNG7  
12  GNG5  GNG2  GNG5;GNG2

现在需要过滤掉重复的基因对:比如GNG7;GNG12和GNG12;GNG7视为同一对,只保留其中一行,最终得到如下结果:

> GNGdata_filtered  
    geneA geneB  GENE_PAIR  
1  GNG7 GNG12 GNG7;GNG12  
2  GNG7  GNG5  GNG7;GNG5  
3  GNG7  GNG2  GNG7;GNG2  
4 GNG12  GNG5 GNG12;GNG5  
5 GNG12  GNG2 GNG12;GNG2  
6  GNG2  GNG5  GNG2;GNG5  
解决方案

核心想法是为每个基因对生成一个标准化的唯一键——不管基因顺序如何,标准化后的键格式统一,之后基于这个键去重即可。

步骤1:生成标准化基因对键

拆分GENE_PAIR列的字符串,对每个拆分后的基因列表排序,再重新拼接成统一格式的字符串:

# 拆分GENE_PAIR为单个基因
split_pairs <- strsplit(GNGdata$GENE_PAIR, ";")
# 对每个基因对排序后重新拼接,得到标准化键
standardized_pairs <- sapply(split_pairs, function(x) paste(sort(x), collapse = ";"))

步骤2:基于标准化键去重

用duplicated()函数标记重复的标准化键,只保留第一次出现的行:

# 筛选出非重复的行
GNGdata_filtered <- GNGdata[!duplicated(standardized_pairs), ]

完整可运行代码

# 构造原始数据框(如果还没生成的话)
geneA <- c("GNG7", "GNG7", "GNG7", "GNG12", "GNG12", "GNG12", "GNG2", "GNG2", "GNG2", "GNG5", "GNG5", "GNG5")
geneB <- c("GNG12", "GNG5", "GNG2", "GNG7", "GNG5", "GNG2", "GNG5", "GNG12", "GNG7", "GNG12", "GNG7", "GNG2")
GNGdata <- data.frame(geneA, geneB, GENE_PAIR = paste(geneA, geneB, sep = ";"))

# 生成标准化基因对键
split_pairs <- strsplit(GNGdata$GENE_PAIR, ";")
standardized_pairs <- sapply(split_pairs, function(x) paste(sort(x), collapse = ";"))

# 去重得到结果
GNGdata_filtered <- GNGdata[!duplicated(standardized_pairs), ]

# 查看过滤后的数据框
GNGdata_filtered

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:28:09