1

我有一个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

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

我怎样才能在 R 中实现这一点?我努力了

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

new_dat <- dat[-multisnp,]

我的multisnp向量是空的,但我不知道如何修复它以匹配我想要的模式。我认为这是我的通配符*使用错误。

4

2 回答 2

2

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

multisnp <- which(grepl("^SNP_.*?_[GCTA]$", dat$pedigree))
                              ^^^
于 2015-05-21T18:00:57.950 回答
1

你可以dat像这样子集

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

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

于 2015-05-21T18:01:14.420 回答