2016-03-16 102 views
1

我想grep與我的模式toMatch exacly匹配的rownames。grep只從模式中精確匹配

toMatch <- c("I-A", "I-AA", "I-AAA") 
dat[grep(toMatch, rownames(dat)), ] 

DAT

hsa-miR-10b-5p_TACCCTGTAGAACCGAATTTGTAA_0;I-AA;0;g   3.939829e-01 
hsa-miR-122-5p_TGGAGTGTGACAATGGTGTTTGATA_0;I-ATA;0;0   3.942306e-01 
hsa-miR-122-5p_TGGAGTGTGGCAATGGTGTTTGAAA_10GA;I-AAA;0;0  3.948047e-01 

hsa-miR-10b-5p_TACCCTGTAGAACCGAATTTGTAA_0;I-AA;0;g   3.939829e-01 
hsa-miR-122-5p_TGGAGTGTGGCAATGGTGTTTGAAA_10GA;I-AAA;0;0  3.948047e-01 
+3

您可以將分號添加到你的模式 – Cath

回答

5

你想grepl因爲它返回的T/F的字符串。 grep/grepl僅以單個字符串作爲輸入,它不能接受向量,您可以添加| (意思或)在不同的事情之間grep。

dat[grepl("I-A|I-AA|I-AAA", rownames(dat)), ] 
+3

我想你也可以寫圖案'「IA {1,3}」 ' –

+2

如果你沒有像上面提到的Cath一樣添加分號,你會匹配'I-ATA',這是不應該的。結合建議,「I-A {1,3};'應該做到這一點。 – alistaire

2

圖書館stringr有利於操作字符串,

dat <- dat[str_detect(dat$V1, toMatch),] 
dat 
#              V1  V2 
#1  hsa-miR-10b-5p_TACCCTGTAGAACCGAATTTGTAA_0;I-AA;0;g 0.3939829 
#3 hsa-miR-122-5p_TGGAGTGTGGCAATGGTGTTTGAAA_10GA;I-AAA;0;0 0.3948047 
+2

你不需要'==「TRUE」',因爲'str_detect'已經返回'TRUE'或'FALSE'。此外,您不應該引用布爾值,否則您最終會遇到類型轉換錯誤,例如'sum(「TRUE」)'vs'sum(TRUE)'。 – alistaire

+0

你是對的。乾杯 – Sotos