2016-03-16 3 views
1

Я хотел бы grep имена ростов, которые соответствуют моему шаблону toMatch.grep только точные совпадения с рисунком

toMatch <- c("I-A", "I-AA", "I-AAA") 
dat[grep(toMatch, rownames(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

Если вы не добавили точку с запятой, предложенную выше, вы собираетесь сопоставить' 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'. Кроме того, вы не должны указывать Booleans, или вы в конечном итоге попадете в ошибку преобразования типов, например. 'sum (" TRUE ")' vs 'sum (TRUE)'. – alistaire

+0

Вы правы. ура – Sotos

Смежные вопросы