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

基因标识数据处理:提取指定片段并过滤重复组合行

基因标识数据的两步处理方案(提取特征+去重)

嘿,我来给你分享两种实用的实现方案,刚好对应你需要的两步操作——先提取V1列下划线后的非数字特征,再过滤重复的V1-V2组合。不管你用Python/Pandas还是R语言,都能轻松搞定:


方案一:Python + Pandas 实现

Pandas是处理表格数据的利器,非常适合这类生物信息学数据的批量处理。

步骤1:提取V1列的目标特征

我们需要先拆分V1字符串,取下划线_后的部分,再去掉其中的数字和多余的符号(比如末尾的点):

  • 用str.split()拆分下划线,取第二部分;
  • 用正则表达式\d+匹配所有数字并替换为空;
  • 用str.rstrip('.')去掉末尾的点(对应例子中K277N.转成KN的需求)。

步骤2:过滤重复的V1-V2组合

用drop_duplicates()方法,指定以处理后的V1和V2作为去重依据,保留第一次出现的行即可。

完整代码示例

import pandas as pd

# 原始数据(如果是从文件读取,可替换为 pd.read_csv('your_data.txt', sep='\s+'))
raw_data = [
    ["ENSP00000222573_N559D", "ENSG00000105855"],
    ["ENSP00000222573_N559D", "ENSG00000105855"],
    ["ENSP00000267853_E337*", "ENSG00000108239"],
    ["ENSP00000299441_R1672P,R1672G", "ENSG00000127415"],
    ["ENSP00000334642_K277N.", "ENSG00000134324"],
    ["ENSP00000342952_N585R", "ENSG00000134324"]
]

# 转为DataFrame
df = pd.DataFrame(raw_data, columns=["V1", "V2"])

# 步骤1:处理V1列
df['V1_processed'] = df['V1'].str.split('_').str[1]
df['V1_processed'] = df['V1_processed'].str.replace(r'\d+', '', regex=True).str.rstrip('.')

# 步骤2:去重,保留唯一的V1_processed-V2组合
df_clean = df.drop_duplicates(subset=['V1_processed', 'V2'], keep='first')

# 输出最终结果
print("处理后的结果:")
print(df_clean[['V1_processed', 'V2']].to_string(index=False))

运行后会输出你需要的最终结果:

V1_processed           V2
          ND ENSG00000105855
          E* ENSG00000108239
        RP,RG ENSG00000127415
          KN ENSG00000134324
          NR ENSG00000134324

方案二:R 语言实现

如果你日常用R做生物信息分析,用tidyverse套件可以快速完成同样的操作。

步骤1:提取V1列的目标特征

用str_split()拆分下划线,str_remove_all()去掉数字,str_remove()去掉末尾的点:

  • str_split(V1, "_", simplify = TRUE)[,2]直接取下划线后的部分;
  • str_remove_all(V1_processed, "\\d+")移除所有数字;
  • str_remove(V1_processed, "\\.$")移除末尾的点。

步骤2:过滤重复组合

用distinct()方法,指定以处理后的V1和V2作为去重依据,自动保留唯一行。

完整代码示例

library(tidyverse)

# 原始数据
raw_data <- tibble(
  V1 = c("ENSP00000222573_N559D", "ENSP00000222573_N559D", "ENSP00000267853_E337*",
         "ENSP00000299441_R1672P,R1672G", "ENSP00000334642_K277N.", "ENSP00000342952_N585R"),
  V2 = c("ENSG00000105855", "ENSG00000105855", "ENSG00000108239",
         "ENSG00000127415", "ENSG00000134324", "ENSG00000134324")
)

# 步骤1:处理V1列
data_processed <- raw_data %>%
  mutate(V1_processed = str_split(V1, "_", simplify = TRUE)[,2]) %>%
  mutate(V1_processed = str_remove_all(V1_processed, "\\d+")) %>%
  mutate(V1_processed = str_remove(V1_processed, "\\.$"))

# 步骤2:去重,保留唯一组合
data_clean <- data_processed %>%
  distinct(V1_processed, V2, .keep_all = FALSE)

# 输出结果
print(data_clean, row.names = FALSE)

运行后同样会得到你需要的最终结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:00:44