2015-09-15 3 views
0

Из заданного data.frame с текстовым столбцом мне нужно подмножество строки, которая содержит подстроку символов, ранее сохраненную в векторе (или во втором столбце data.frame).R - data.frame подмножество с поиском подстроки

Example data: 

require(stringi) # Used for generate random string 
set.seed(1) 
df <- as.data.frame(cbind(seq(from = 1, to = 10, by = 1), stri_rand_strings(10, 5))) 

df 

    V1 V2 
1 1 GNZuC 
2 2 twed3 
3 3 CAgNl 
4 4 UizNm 
5 5 vDe7G 
6 6 N0NrL 
7 7 TbUBp 
8 8 fn6iP 
9 9 oemYW 
10 10 m1Tjg 

Если хранить искомые подстроки в векторе, как показало

tofind <- c("AgN", "bUB") 

В результате мне нужно получить следующий data.frame

V1 V2 
1 3 CAgNl 
2 7 TbUBp 

Спасибо за любую помощь

ответ

0

Это работает, если вы измените свой вектор tofind (с капиталом N):

tofind <- c("AgN", "bUB") 

df[grep(paste(tofind, collapse = "|"), df$V2),] 

    V1 V2 
3 3 CAgNl 
7 7 TbUBp 

И используя subset функцию:

subset(df, grepl(paste(tofind, collapse = "|"), V2)) 

Здесь используется grepl вместо grep, потому что subset функции требует логического вектора не числового

+0

Он отлично работает и на реальном большом набор данные. Мой тупик решен. Одно расширение вопроса: возможно ли иметь эквивалентное решение, используя инструкцию подмножества? – Tiziano

+0

Да, вот и все! см. обновление –

+0

Хотя подробный поиск более прост в использовании синтаксиса подмножества. Я исправил свою ошибку для дальнейших читателей. Спасибо всем. – Tiziano

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