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



我有一个数据帧,看起来像这个

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

我想从">名称";导出唯一名称仅基于句子的前半部分(例如PFLU_00001(

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

name 
PFLU_00001
PFLU_00002
PFLU_00003 

我们非常感谢您的帮助和指导。

带着最美好的祝愿,LDT-

使用unique+gsub的基本R选项

unique(
transform(
df["name"],
name = gsub("_\D+$", "", name)
)
)

给出

name
1 PFLU_00001
4 PFLU_00002
7 PFLU_00003

我们可以使用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

最新更新