我有一个数据表,其中包含许多街道地址字段列,例如NUM
, STREET_PRE
, STREETNAME
, STREETTYPE
, APT_NO
, CITY
, STATE
, ZIP
。许多行在所有列中都没有值,例如STREET_PRE
or APT_NO
。
我需要从这些列中获取地址字符串。使用 paste0 会将字符串“NA”放入结果中。我搜索并发现一些关于这个问题的讨论只是在之后替换“NA”,或者在连接中使用 if else。如果有一些“NA”的有效输入,之后替换 NA 可能会带来问题。
stringr
看起来很有希望,str_c
因为它会跳过 NA。但是我总是得到 NA 作为这个输入的结果:
>t1 = c(NA, "Charles County, MD", NA, "Charles County", "MD","00000")
>str_c(t1, collapse = '')
[1] NA
>stri_c(t1,ignore_null = TRUE, collapse = '')
[1] NA
这个输入有一些非标准值,但我仍然希望得到一个地址字符串。我会让地理编码器确定地址是否有效。
这似乎是一项简单的任务,但很难得到我想要的东西。paste
, str_c
,stri_c
似乎都试图匹配两个向量并将它们连接起来,但我只想连接一系列字符串。它们都适用于正常情况,但是带有 NA 的输入在不同的功能中导致了不同的问题。
编辑下面的答案和评论适用于单行输入,但在数据表中产生了意外结果。当我只希望它们在当前行上工作时,它们可能在整个列向量上工作。
我尝试了这些行但没有成功:
address2011_MD_DC[, input_address := paste(na.omit(c(NUM_MILE,STREET_PRE,STREETNAME,STREETTYPE,STREETSUF,APT_NO)),collapse = " ") ]
address2011_MD_DC[, input_address :=
str_c(na.omit(c(NUM_MILE,STREET_PRE,STREETNAME,STREETTYPE,STREETSUF,APT_NO)), collapse = ' ' )]
可能是折叠参数将我想要的列组合成单个值。也许我必须回到我原来的使用方法paste0
,但首先用 '' 替换 NAs。