как сделать str_detect нечувствительным к регистру внутри case_when в r - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть датафрейм, как показано ниже:

dfm = data.frame (names = c('email', 'Facebook', 'walmart', 'target', 'instagram', 'costco'))

Мне нужно создать новый столбец source. Когда имена - Facebook, Instagram или электронная почта, источник - СМИ. Когда имена являются costco, walmart или target, источником является магазин.

Я использую case_when и str_detect. Мне нужно, чтобы str_detect не учитывал регистр. Итак, ниже мой код.

dfm %>% 
  mutate(source = case_when( str_detect(names, fixed('email|facebook|instagram', ignore_case = T))~'media',
                             str_detect(names, 'walmart|costco|target')~ 'store'))

Я получил:

names       source
email       NA          
Facebook    NA          
walmart     store           
target      store           
instagram   NA          
costco      store

Я не понимаю, почему это не сработало. Кто-нибудь знает почему?

Я попробовал код ниже, он возвращает TRUE

str_detect('Facebook', fixed('facebook', ignore_case = T))

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Также попробуйте регулярное выражение вместо фиксированного:

dfm %>% 
  mutate(source = case_when( str_detect(names, regex('email|facebook|instagram', ignore_case = T))~'media',
                             str_detect(names, 'walmart|costco|target')~ 'store'))
1 голос
/ 12 апреля 2020

Когда вы используете fixed, он не распознает | как регулярное выражение. Если вы хотите сделать точное соответствие, используйте границы слов, например \\b.

library(dplyr)
library(stringr)

dfm %>% 
   mutate(source = case_when(str_detect(names, 
                 regex('\\bemail\\b|\\bfacebook\\b|\\binstagram\\b', 
                        ignore_case = TRUE))~'media',
                  str_detect(names, 'walmart|costco|target')~ 'store'))

#      names source
#1     email  media
#2  Facebook  media
#3   walmart  store
#4    target  store
#5 instagram  media
#6    costco  store
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...