Определите элемент вектора, который содержит ТОЛЬКО определенные строки в r - PullRequest
0 голосов
/ 16 мая 2019

У меня длинный список адресов. некоторые из них содержат только CA или USA или оба. Мне нужно преобразовать их в NA и оставить другие нетронутыми.

Например, у меня есть вектор, как показано ниже:

loc = c('CA, USA',
        'USA',
        '2 main st CA',
        '35 1st ave CA, USA',
        'CA')

Что мне нужно, это:

loc = c( NA, NA, '2 main st CA',
        '35 1st ave CA, USA', NA)

Это всего лишь пример. Фактический список очень длинный. Заранее большое спасибо.

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Если шаблон, который вы хотите сохранить, всегда начинается с цифры, то вы можете использовать это

> loc[grep("^\\d", loc, invert = T)] <- NA
> loc
[1] NA     NA     "2 main st CA"   "35 1st ave CA, USA"   NA                  
0 голосов
/ 16 мая 2019

nchar будет считать буквы в каждом элементе вектора строк.

ifelse(nchar(string) > 7, string, NA) #to account for spaces

string<-c('CA, USA',
          'USA',
          '2 main st CA',
          '35 1st ave CA, USA',
          'CA')

string
[1] "CA, USA"            "USA"                "2 main st CA"      
[4] "35 1st ave CA, USA" "CA" 

ifelse(nchar(string) > 7, string, NA)
[1] NA                   NA                   "2 main st CA"      
[4] "35 1st ave CA, USA" NA 

Или вы можете свернуть все строки, используя:

st <- gsub(" ", "", gsub(",", "", string))
st
[1] "CAUSA"         "USA"           "2mainstCA"     "351staveCAUSA"
[5] "CA" 

replace(string, nchar(st) < 6, NA)
[1] NA                   NA                   "2 main st CA"      
[4] "35 1st ave CA, USA" NA 

Или, если вы точно знаете свои критерии:

ifelse((grepl("^USA$", st) | grepl("^CA$", st) | 
grepl("^USACA$", st) | grepl("^CAUSA$", st)), NA, string)
[1] NA                   NA                   "2 main st CA"      
[4] "35 1st ave CA, USA" NA
...