Как использовать функцию поиска для поиска? - PullRequest
1 голос
/ 15 марта 2020

Я хочу построить функцию, которая позволяет мне определять дни из любой строки. Каталог моих дней:

days<-c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")

Поиск должен выполняться без учета регистра, но не должен включать частичные совпадения, такие как понедельник для понедельника или вторник для вторника.

Например, приведенная ниже строка должна давать я результаты, как указано ниже.

string<-"Wednesday mon Tuesday Thraus Friday"

Ожидаемый результат:

result<-c("Tuesday","Wednesday", "Friday")

Мой код:

days<-c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")

string<-("WednesdayTuesday Mon Thraus Friday")
string<-strsplit(string, " ", fixed=TRUE)
string<-unlist(string)  
result<- unique (grep(paste(tolower(string), collapse = "|"), tolower(days), value = TRUE))
# [1] "monday"    "tuesday"   "wednesday" "friday"  

Как я могу использовать функцию grep, чтобы получить ожидаемый результат? Спасибо!

1 Ответ

0 голосов
/ 15 марта 2020

Мы можем использовать str_extract_all после paste вектора 'days' в виде единой строки для pattern

library(stringr)
pat <- paste0("\\b(", paste(days, collapse="|"), ")\\b")
str_extract_all(string, pat))[[1]]
#[1] "Wednesday" "Tuesday"   "Friday"

Или в base R с regmatches/gregexpr

regmatches(string, gregexpr(pat, string))[[1]]
#[1] "Wednesday" "Tuesday"   "Friday"   '

данные

days<-c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
string <- "Wednesday mon Tuesday Thraus Friday"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...