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

如何在R中使用sub函数保留gene_id中“.”之前的内容?

解决方法

错误原因分析

你之前的代码存在两个问题:

  1. 正则表达式逻辑错误:.*^.的匹配逻辑混乱,.*会匹配任意字符,^代表行首却放在表达式中间,.代表任意单个字符,最终错误删除了首字母E,且没正确匹配.后的内容。
  2. 数据范围错误:直接操作gene_annot_parsed$gene_id仅提取了单列,导致其他列丢失。

正确实现方式

方法一:Base R 直接修改原数据框

使用sub函数搭配正确的正则表达式,直接赋值给原数据框的gene_id列,保留所有其他列:

# 修改gene_id列,保留.之前的内容
gene_annot_parsed$gene_id <- sub("\\..*", "", gene_annot_parsed$gene_id)

正则解释:\\..*中,\\.转义后匹配真实的.,.*匹配.之后的所有字符,替换为空字符串即可保留.前的内容。

方法二:Tidyverse 风格(dplyr)

若习惯使用tidyverse工具包,可通过mutate函数精准修改指定列:

library(dplyr)

gene_annot_parsed <- gene_annot_parsed %>%
  mutate(gene_id = sub("\\..*", "", gene_id))

验证结果

执行修改后查看数据框:

gene_annot_parsed

输出结果如下(gene_id已正确处理,其他列完整保留):

# A tibble: 5 × 6
    chr gene_id          gene_name  start   end gene_type                         
  <dbl> <chr>            <chr>      <dbl> <dbl> <chr>                             
1     1 ENSG00000223972 DDX11L1     11869 14403 transcribed_unprocessed_pseudogene
2     1 ENSG00000227232 WASH7P      14410 29553 unprocessed_pseudogene            
3     1 ENSG00000278267 MIR6859-1   17369 17436 miRNA                             
4     1 ENSG00000243485 MIR1302-2HG 29571 31109 lincRNA                           
5     1 ENSG00000237613 FAM138A     34554 36081 lincRNA                           

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:17:37