识别在r中仅包含某些字符串的向量元素

时间:2019-05-16 19:14:21

标签: r stringr

我有一长串地址。其中一些仅包含CAUSA或两者都包含。 我需要的是将它们转换为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 :(得分:0)

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

答案 1 :(得分:0)

如果您要保留的模式始终以数字开头,那么您可以使用此

> loc[grep("^\\d", loc, invert = T)] <- NA
> loc
[1] NA     NA     "2 main st CA"   "35 1st ave CA, USA"   NA