使用grepl在R中进行模式匹配

时间:2015-05-21 17:56:36

标签: regex r grepl

我有一个像这样的数据框dat

P pedigree cas 1 M rs2745406 T 2 M rs6939431 A 3 M SNP_DPB1_33156641 G 4 M SNP_DPB1_33156664_G P 5 M SNP_DPB1_33156664_A A 6 M SNP_DPB1_33156664_T A

我想要排除pedigree列以SNP_开头并以G,C,T或A(_[GCTA])结尾的所有行。在这种情况下,这将是行4,5,6。

我怎样才能在R中实现这一目标?我试过了

multisnp <- which(grepl("^SNP_*_[GCTA]$", dat$pedigree)=="TRUE")

new_dat <- dat[-multisnp,]

我的multisnp向量是空的,但我无法弄清楚如何修复它以便它匹配我想要的模式。我认为这是我的通配符*使用错误。

2 个答案:

答案 0 :(得分:2)

您可以将以下内容与.*?一起使用(以非贪婪的方式匹配所有内容):

multisnp <- which(grepl("^SNP_.*?_[GCTA]$", dat$pedigree))
                              ^^^

答案 1 :(得分:1)

您可以像这样分组dat

new_dat <- dat[!grepl("^SNP_.*_[GCTA]$", dat$pedigree), ]

关于您尝试过的代码,我不确定grepl("^SNP_*_[GCTA]$")是否会在没有错误的情况下完成,因为您没有将x向量传递给grepl。有关详细信息,请参阅?grepl