Найти подходящие индексы для вектора шаблона в grep - PullRequest
0 голосов
/ 12 октября 2018

Есть ли простой способ найти соответствующие векторные индексы при работе с grep?

v=c(123,456,789,651)
pat=c(1,35,47,8)
id=grep(paste0(pat, collapse="|"), v)
v[id]

[1] 123 789 651

Я хотел бы сгенерировать:

pat_id
[1] 1 4 1

Так что pat[pat_id] даст мне значения в pat, которые соответствуют.

pat[pat_id]
[1] 1 8 1

match() не может использоваться в этом случае, потому что строки должны быть идентичны, чтобы считаться совпадением.

1 Ответ

0 голосов
/ 12 октября 2018

Мы можем выполнить цикл по v и использовать str_detect, поскольку он векторизован, чтобы найти, существует ли шаблон в каком-либо из них, и вернуть индекс или вектор напрямую.

library(stringr)
unlist(sapply(v, function(x) which(str_detect(x, as.character(pat)))))
#[1] 1 4 1

Если последнийцель состоит в том, чтобы получить pat векторов, вместо этого мы можем напрямую сделать

unlist(sapply(v, function(x) pat[str_detect(x, as.character(pat))]))
#[1] 1 8 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...