2017-01-13 11 views
0

У моего dataset есть столбец GeogPreferences, который содержит несколько строк в одной строке. У меня есть вектор строк region, который я хочу использовать для поиска в этом столбце. Я создаю новый столбец geog и если GeogPreferences содержит любой из строк в geog, я хочу, чтобы сохранить тот же текст из GeogPreferences, иначе я просто заменить текст «Все»Новый столбец с использованием grep для поиска строк в существующем столбце в R

Мой пример кода:

myDf <- structure(list(GeogPreferences = structure(1:4, .Label = c("Asia, Central and East Europe, Europe, North America, West Europe, Australia, Belgium, Czech Republic, France, Germany, India, Italy, Luxembourg, Netherlands, Poland, Romania, Spain, UK, US", 
"Europe, North America, West Europe, US", "Global, North America", 
"Northeast, Southeast, West, US"), class = "factor")), .Names = "GeogPreferences", class = "data.frame", row.names = c(NA, 
-4L)) 

region <- c("Northeast","Southeast","West","Midwest","Southwest") 

myDf$geog <- ifelse((grepl(paste(region, collapse = "|"), myDf$GeogPreferences)),myDf$GeogPreferences, c("All")) 

проблема заключается в том grep рассматривает строки, как «Западная Европа», чтобы быть в списке region из-за слова «Запад», и я получаю следующие выходные данные

geog 
1 
2 
All 
4 

Я ожидаю выход, как:

geog 
All 
All 
All 
Northeast, Southeast, West, US 

Есть ли способ использовать Grep или любую другую функцию, чтобы получить этот вывод?

+1

'IfElse (grepl (паста (область, коллапс = "|"), myDf $ GeogPreferences), as.character (myDf $ GeogPreferences), "Все") ' – alistaire

+0

Это сработало! Благодаря @alistaire – krish

ответ

0

Мы можем использовать if_else из dplyr

library(dplyr) 
myDf %>% 
    mutate(geog = if_else(grepl(paste(region, collapse=",|"), 
       GeogPreferences), as.character(GeogPreferences), "All"))