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

how to use R package stringr or stringi to concatenate strings with NAs in data table

我有一个数据 table,其中包含许多街道地址字段列,例如 NUMSTREET_PRESTREETNAMESTREETTYPEAPT_NOCITYSTATEZIP。许多行在所有列中都没有值,例如 STREET_PREAPT_NO.

我需要从这些列中获取地址字符串。使用 paste0 会将字符串 "NA" 放入结果中。我搜索了一下,发现一些关于这个问题的讨论只是在之后替换 "NA" ,或者在连接中使用 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 下面的答案和评论适用于单行输入,但在数据 table 中产生了意外结果。当我只希望它们处理当前行时,它们可能处理整个列向量。

我尝试了这些行但没有成功:

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 的方法,但是先用 '' 替换 NAs。

来自 stringi 文档:

In case of any NA in an input vector, NA is set to the corresponding element. Note that this behavior is different from paste, which treats missing values as ordinary strings "NA".

先尝试删除 NA

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