如何用dplyr从R数据框的复杂文本列提取PFLU_***字符串
提取type列中的PFLU格式基因ID
我来帮你搞定这个提取需求!你想要从dataframe的type列里精准拿出PFLU_***格式的基因ID,其实用正则表达式就能轻松实现,下面给你两种实用的R语言方法:
首先先确认你的原始数据(方便复现问题):
type=c("ID=gene:PFLU_4201; biotype=protein_coding;description=putative filamentous adhesin;gene_id=PFLU_4201; logic_name=ena", "ID=gene:PFLU_5927;Name=algP1;biotype=protein_coding; description=transcriptional regulatory protein algp (alginate regulatory protein algr3); gene_id=PFLU_5927;logic_name=ena") SNP=c(1, 2) data=data.frame(type, SNP)
方法一:用基础R的sub函数
不需要额外安装包,直接用基础R的正则替换功能,把非目标内容全部替换掉,只保留我们要的PFLU_开头的序列:
data$type <- sub(".*(PFLU_\\d+).*", "\\1", data$type)
这里的正则.*(PFLU_\\d+).*的意思是:匹配任意内容,然后捕获PFLU_加一串数字的部分,最后把整个字符串替换成捕获到的内容(\\1代表第一个捕获组)。
方法二:用stringr包的str_extract(更直观)
如果你习惯用tidyverse系列的工具,stringr包的str_extract函数可以直接提取匹配的字符串,代码更简洁:
# 先安装包(第一次用的话) # install.packages("stringr") library(stringr) data$type <- str_extract(data$type, "PFLU_\\d+")
这里的PFLU_\\d+就是精准匹配以PFLU_开头、后面跟着一个或多个数字的字符串,直接提取出符合条件的部分。
两种方法运行后,你的dataframe都会变成你想要的样子:
type SNP 1 PFLU_4201 1 2 PFLU_5927 2
内容的提问来源于stack exchange,提问作者LDT
相关产品推荐
相关产品推荐

