用于在 R 中搜索数据帧的正则表达式



我有一个条形码列表,格式为:AAACCTGAGCGTCAAG-1 字母可以是 A、C、G 或 T,破折号后的数字可以是 1 - 16。

barcode = c('AAACCTGAGCGTCAAG-1',
'AAACCTGAGTACCGGA-1',
'AAACCTGCAGCTGCTG-1',
'AAACCTGCATCACGAT-3',
'AAACCTGCATTGGGCC-5',
'AAACCTGGTATAGTAG-10',
'AAACCTGGTCGCGTGT-1',
'AAACCTGGTTTCCACC-16',
'AAACCTGTCATGCATG-14',
'AAACCTGTCGCAGGCT-15',
'AAACGGGAGAACTCGG-1')
cluster = c(6,3,6,16,17,11,14,18,9,8,14)
df <- data.frame(Barcode = barcode, Cluster = cluster)

我需要根据条形码末尾的 -# 对这个数据帧进行子集化。我一直在使用它来子集数据帧。问题是这适用于除 1 以外的每个数字。

> df[grep("([ACGT]-10){1}", df$Barcode),]
Barcode Cluster
6 AAACCTGGTATAGTAG-10      11

当我使用以下代码时,它将包括所有以 -1 结尾的条形码,以及 -10、-11、-12、-13、-14、-15 和 -16。

> df[grep("([ACGT]-1){1}", df$Barcode),]
Barcode Cluster
1   AAACCTGAGCGTCAAG-1       6
2   AAACCTGAGTACCGGA-1       3
3   AAACCTGCAGCTGCTG-1       6
6  AAACCTGGTATAGTAG-10      11
7   AAACCTGGTCGCGTGT-1      14
8  AAACCTGGTTTCCACC-16      18
9  AAACCTGTCATGCATG-14       9
10 AAACCTGTCGCAGGCT-15       8
11  AAACGGGAGAACTCGG-1      14
> 

是否有一个正则表达式将包含以 -1 结尾的条形码,但排除以 10 - 16 的数字结尾的所有其他条形码? 我想对数据帧进行子集化,以便我只得到这个:

Barcode Cluster
1   AAACCTGAGCGTCAAG-1       6
2   AAACCTGAGTACCGGA-1       3
3   AAACCTGCAGCTGCTG-1       6
7   AAACCTGGTCGCGTGT-1      14
11  AAACGGGAGAACTCGG-1      14
> 

谢谢!

怎么样:

df[grep("-1$", df$Barcode),]

这匹配字符串末尾的 1,但也要求 1 之前的数字不是 1,因此您不匹配 11

Barcode Cluster
1  AAACCTGAGCGTCAAG-1       6
2  AAACCTGAGTACCGGA-1       3
3  AAACCTGCAGCTGCTG-1       6
7  AAACCTGGTCGCGTGT-1      14
11 AAACGGGAGAACTCGG-1      14

我认为你可以使用df[grep("([ACGT]-1$){1}", df$Barcode),]

您可以只使用 $ 来指定链的末端。在此处查看有关"模式"使用的更多信息:http://www.jdatalab.com/data_science_and_data_mining/2017/03/20/regular-expression-R.html

最新更新