我有一个条形码列表,格式为: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