如何使用R包stringr或stringi将字符串与数据表中的NA连接起来



我有一个数据表,其中包含许多列街道地址字段,如NUMSTREET_PRESTREETNAMESTREETTYPEAPT_NOCITYSTATEZIP。许多行并不是所有列都有值,比如STREET_PREAPT_NO

我需要从这些列中获取地址字符串。使用paste0将字符串"NA"放入结果中。我搜索了一下,发现一些关于这个问题的讨论只是在之后替换"NA",或者在concatenate中使用if-else。如果有一些有效的"NA"输入,之后替换NA可能会带来问题。

stringrstr_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

这个输入有一些非标准值,但我仍然希望得到一个地址字符串。我将让地理编码器来确定地址是否有效。

这似乎是一项简单的任务,但很难得到我想要的。pastestr_cstri_c似乎都试图匹配两个向量并连接它们,但我只想连接一系列字符串。它们都适用于正常情况,但NA的输入在不同的功能中引起了不同的问题。

EDIT下面的答案和注释对单行输入有效,但在数据表中产生了意外结果。当我只想让它们处理当前行时,它们可能正在处理列的整个向量。

我尝试了这些线路,但没有成功:

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 = ' ' )]

它可以是collapse参数,将我想要的列组合为一个值。也许我必须回到使用paste0的原始方法,但首先用"替换NA。

来自stringi文档:

在输入矢量中存在任何NA的情况下,NA被设置为要素请注意,这种行为与粘贴不同,粘贴处理缺少作为普通字符串"NA"的值。

尝试先删除NA

library(stringi)
stri_c(na.omit(t1), collapse = "")

最新更新