0

我有一个数据表,其中包含许多街道地址字段列,例如NUM, STREET_PRE, STREETNAME, STREETTYPE, APT_NO, CITY, STATE, ZIP。许多行在所有列中都没有值,例如STREET_PREor 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。

4

1 回答 1

1

stringi文档:

如果输入向量中有任何 NA,则将 NA 设置为相应的元素。请注意,此行为与 paste 不同,后者将缺失值视为普通字符串“NA”。

尝试先删除NAs :

library(stringi)
stri_c(na.omit(t1), collapse = "")
于 2015-11-13T14:16:21.487 回答