Извлечь строку, условную для набора предопределенных символов - PullRequest
0 голосов
/ 14 сентября 2018

Я использую R 3.5 и RStudio.

У меня есть следующий вектор символов, а также предопределенный набор символов (другой вектор).Я хочу использовать предопределенный набор для извлечения символов из вектора, независимо от порядка символов в предопределенном наборе.

MWE:

ranchar <- c("rtrt, ABC","DEF, ktg", "eeh ABC HuJ","hJN, DEF, Jjk","hJN, DEF, Jjk")    
set <- c("ABC","DEF")

Требуемый результат будетвектор или список, например

[1] "ABC" "DEF" "ABC" "DEF" "DEF"  

Однако использование str_extract_all из пакета stringr приводит к

 library(stringr)
 str_extract_all(ranchar, set)
 [[1]]
 [1] "ABC"

 [[2]]
[1] "DEF"

[[3]]
[1] "ABC"

[[4]]
[1] "DEF"

[[5]]
character(0)     

По-видимому, важен порядок символов в объекте "set" (см.пятый элемент).Однако я хочу, чтобы функция просто извлекала символы из векторного ранчара, не заботясь о порядке символов в ранчарах или наборе.

1 Ответ

0 голосов
/ 14 сентября 2018

Вместо того, чтобы аргумент pattern равнялся str_extract быть set, вам нужно превратить его в регулярное выражение, которое допускает любой из элементов набора.

str_extract(ranchar, paste0(set, collapse="|"))
"ABC" "DEF" "ABC" "DEF" "DEF"

Шаблон:

paste0(set, collapse="|")
[1] "ABC|DEF"

, который допускает "ABC" или "DEF"

...