2017-04-21 2 views
1

몇 가지 조건을 바탕으로 키워드 검색을 시도하고 있습니다. 아래의 코드는 예제 데이터를 생성하고이를 통해 작업을 시도합니다. 그것은 ifelse를 좋아하지 않는다. GREP가 실제로 true/false가 아니라 실제 데이터를 반환하기 때문에 나는 믿는다. 내가 하위 집합을 만들어서 다시 병합해야한다고 생각해? 그러나 GREP를 사용하는 하위 집합에 둘 이상의 조건을 넣을 수 없습니다.복수 조건 키워드 검색

도움을 주시면 감사하겠습니다.

bus_name|type|flag 
jacks wok shop|restaurant|Wok 
jacks ski shop|restaurant 
jacks wokshop|restaurant|Wok 
jacks bakery|restaurant 
jacks business|office|Business 
jims Brewery|store 
jims Wok Brewery|building|Wok 
+0

정말 ''의 restuarant '를? 했어야 유형 –

+0

죄송합니다, 그 몇 곳에서 맞춤법이 틀린했다 .. –

답변

1

grepl는 논리 값을 원하는 경우에 사용하는 기능입니다 :

bus_name <- c('jacks wok shop' 
       ,'jacks ski shop' 
       ,'jacks wokshop' 
       ,'jacks bakery' 
       ,'jacks business' 
       ,'jims Brewery' 
       ,'jims Wok Brewery' 
) 
type <- c('restaurant' 
      ,'restaurant' 
      ,'restaurant' 
      ,'restaurant' 
      ,'office' 
      ,'store' 
      ,'building' 
) 

mydata <- data.frame(bus_name, type) 

mydata$bus_name <- as.character(mydata$bus_name) 
mydata$type <- as.character(mydata$type) 


mydata$flag <- ifelse(mydata$type == "restaurant" & mydata[grep("WOK",toupper(mydata$bus_name)),],"Wok", 
         ifelse(mydata$type == "office" & mydata[grep("BUSINESS",toupper(mydata$bus_name)),],"Business","0")) 

이상적인 출력은 다음이 될 것입니다. 당신은 당신이 FALSE/TRUE의 논리적 벡터를 얻을 수 grepl를 사용해야이

mydata$flag <- ifelse(mydata$type == "restaurant" & grepl("WOK",toupper(mydata$bus_name)), 
           "Wok", 
         ifelse(mydata$type == "office" & grepl("BUSINESS",toupper(mydata$bus_name)), 
           "Business","")) 
2

뭔가를해야합니다. dplyr에서 case_when을 사용할 수 있습니다. 중첩 된 ifelse보다 읽기가 쉽습니다.

library(dplyr) 
mydata %>% 
mutate(flag=case_when(
.$type == "restaurant" & grepl("WOK",toupper(.$bus_name)) ~ "Wok", 
.$type == "office" & grepl("BUSINESS",toupper(.$bus_name)) ~ "Business", 
                 TRUE ~ "0" 
)) 

      bus_name  type  flag 
1 jacks wok shop restaurant  Wok 
2 jacks ski shop restaurant  0 
3 jacks wokshop restaurant  Wok 
4  jacks bakery restaurant  0 
5 jacks business  office Business 
6  jims Brewery  store  0 
7 jims Wok Brewery building  0 
+0

딱! 나는 가능하면 dplyr 통합 찾고 있었다. 좋은 작품이 고정, 감사합니다! –