Поиск фраз без точного соответствия с использованием% в% - PullRequest
0 голосов
/ 30 мая 2018

Я использую следующий код ниже для поиска определенных состояний внутри столбца в кадре данных с именем Area.Столбец Площадь содержит город и штат, как правило, и другую фразу, как показано здесь.Так, например, Ohio в Cleveland, Ohio не будет найдено.

Есть идеи, как изменить код для поиска частичных совпадений по состоянию?Могу ли я где-нибудь добавить %like% в код?

DataFrame с именем Data:

**Area**   
Cleveland, Ohio
Manhattan, New York
Lower Nevada

Код:

StateFunding <- c("California","North 
Carolina","Texas","Florida","Maryland","Pennsylvania","New York")
Data$Classification = "0"

for (i in 1:length(Data$Area))
{
  if(Data$Area[i] %in% StateFunding) {
   Data$Classification[i] = "InList"
  } else {
   Data$Classification[i] = "NotinList"
  }
}

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Возможное решение:

i <- rowSums(sapply(StateFunding, function(p) agrepl(p, mydf$Area))) > 0

mydf$Classification <- c('NotInList','InList')[1 + i]

, что дает:

> mydf
                 Area Classification
1     Cleveland, Ohio      NotInList
2 Manhattan, New York         InList
3        Lower Nevada      NotInList

Вы также можете сделать это с помощью ifelse:

ifelse(rowSums(sapply(StateFunding, function(p) agrepl(p, mydf$Area))) > 0, 'InList', 'NotInList')

Используемые данные:

mydf <- structure(list(Area = c("Cleveland, Ohio", "Manhattan, New York", "Lower Nevada")), 
                  .Names = "Area", class = "data.frame", row.names = c(NA, -3L))
0 голосов
/ 30 мая 2018

Вы можете использовать функцию grepl, чтобы проверить, является ли одна строка подстрокой другой строки.Например:

for (i in 1:length(Data$Area))
{
  if(sum(sapply(StateFunding,grepl,x=Data$Area[i]))>0){
    Data$Classification[i] = "InList"
  } else {
    Data$Classification[i] = "NotinList"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...