我有一个像这样的数据框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
向量是空的,但我无法弄清楚如何修复它以便它匹配我想要的模式。我认为这是我的通配符*
使用错误。
答案 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
。