2017-01-12 4 views
1

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

keyword <- c("advertising plan", 
       "advertising budget", 
       "marketing plan", 
       "marketing budget", 
       "hr plan", 
       "hr budget", 
       "operation plan", 
       "operation budget") 
indicator <- c(1,0,0,1,1,1,0,1) 
sample <- cbind(keyword,indicator) 
+0

Вы, возможно, пропустили что-то из вектора индикатора, это не то же самое длина –

+0

Спасибо за Напоминание –

ответ

1

Это возможное решение с использованием регулярного выражения и пакета stringr. Как упоминалось в комментариях, я расширил indicator еще на 2 значения. В основном вы хотите обнаружить с регулярным выражением, которое у keyword не имеет «плана» в них или начинается с «рекламы» или «маркетинга». НТН

library("tidyverse") 
library("stringr") 

keyword <- c("advertising plan", 
      "advertising budget", 
      "marketing plan", 
      "marketing budget", 
      "hr plan", 
      "hr budget", 
      "operation plan", 
      "operation budget") 

indicator <- c(1,0,1,0,0,1,1,1) 

df <- data_frame(keyword,indicator) 

    df %>% 
    filter(!keyword %>% stringr::str_detect("plan") | 
      keyword %>% stringr::str_detect(pattern = c("^advertising|marketing"))) 

# A tibble: 6 × 2 
      keyword indicator 
       <chr>  <dbl> 
1 advertising plan   1 
2 advertising budget   0 
3  marketing plan   1 
4 marketing budget   0 
5   hr budget   1 
6 operation budget   1 
+0

Ваш поиск по шаблону не ищет 'plan' вообще. – thelatemail

+0

извините - я понял, что вы хотите избавиться от всех строк, содержащих «план» _unless_, он начинается с «рекламы» или «маркетинга» - вот что это делает – davidski

+0

Это выглядит лучше - хотя вы можете удалить строку 'stringr :: 'prefixes, я думаю, вы уже загрузили пакет' stringr', так что все должно быть в порядке. – thelatemail

2

Без использования фантазии регулярных выражений, я бы, наверное, просто пойти на совмещая два правила:

sample[!(grepl("plan", sample[,"keyword"]) & 
     (!grepl("marketing|advertising", sample[,"keyword"]))),] 
#  keyword    indicator 
#[1,] "advertising plan" "1"  
#[2,] "advertising budget" "0"  
#[3,] "marketing plan"  "0"  
#[4,] "marketing budget" "1"  
#[5,] "hr budget"   "1"  
#[6,] "operation budget" "1" 
+0

Хорошо работает. Спасибо за редактирование и ответ на мой вопрос. –

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