我有一个数据帧,看起来像这个
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