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

pattern matching in R using 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 向量是空的,但我不知道如何修复它以使其匹配我想要的模式。我认为我的通配符 * 用法有误。

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

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

您可以像这样子集 dat

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

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