仅根据 R 中句子的一部分查找不同的元素

Find distinct elements based only on a part of the sentence in R

我有一个 data.frame 看起来像这样

name=c("PFLU_00001_gene", "PFLU_00001_mRNA", "PFLU_00001", 
       "PFLU_00002_gene", "PFLU_00002_mRNA", "PFLU_00002",
       "PFLU_00003_gene", "PFLU_00003_mRNA", "PFLU_00003")

type=c("gene", "mRNA","CDS","gene", "mRNA","CDS","gene", "mRNA","NA")

df <- data.frame(name, type)

             name type
1 PFLU_00001_gene gene
2 PFLU_00001_mRNA mRNA
3      PFLU_00001  CDS
4 PFLU_00002_gene gene
5 PFLU_00002_mRNA mRNA
6      PFLU_00002  CDS
7 PFLU_00003_gene gene
8 PFLU_00003_mRNA mRNA
9      PFLU_00003  NA

我想从“names”列导出唯一名称 仅基于句子的第一部分(例如 PFLU_00001)

我希望我的数据看起来像这样。

name 
PFLU_00001
PFLU_00002
PFLU_00003 

非常感谢任何帮助和指导。

致以最良好的祝愿, LDT

我们可以使用str_remove来删除_后跟一个或多个不是_[^_]+$)的字符($) 并指定一个正则表达式环视 ((?<=[0-9])) 以便它匹配数字

后面的 _
library(dplyr)
library(stringr)
df %>% 
    transmute(name = str_remove(name, "(?<=[0-9])_[^_]+$")) %>% 
    distinct(name)

-输出

#    name
#1 PFLU_00001
#2 PFLU_00002
#3 PFLU_00003

使用 unique + gsub

的基础 R 选项
unique(
  transform(
    df["name"],
    name = gsub("_\D+$", "", name)
  )
)

给予

        name
1 PFLU_00001
4 PFLU_00002
7 PFLU_00003