使用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
。
我有一个这样的数据框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
。