我有一长串地址。其中一些仅包含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)
这只是一个例子。实际的清单很长。 非常感谢。
答案 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