R 粘贴 - 忽略我粘贴的至少一个元素是 NA 的情况

R Paste - ignore cases where at least one element I am pasting is NA

我有以下向量:

vector1 <- c("A", "B", "C" , NA, NA, "D")

我想应用此函数粘贴忽略 vector1 中的 NA 值

vector2 <- paste("#", vector1, "something", sep = "")

并获得这个

vector2 <- c("#Asomething", "#Bsomething" , "#Csomething", NA, NA, "#Dsomething")

我想避免使用 sub 的 ex-post 解决方案,我只是去掉了字符串中包含字母 "NA" 的元素。

我看到了一个类似的问题:suppress NAs in paste()但是他们想忽略 NA 并简单地粘贴#something 而我希望显示 NA。

基础 R 解决方案:

vector2 <- ifelse(is.na(vector1), NA_character_, paste("#", vector1, "something" ,sep = ""))

我认为您需要将 sapply() 与匿名函数一起使用。

请看下面的代码,它可以满足您的需求。

vector1 <- c("A", "B" , "C" ,NA_character_ , NA_character_, "D")
vector2 <- sapply( vector1, function( x ) 
  ifelse( is.na( x ), 
          NA_character_, 
          paste("#", x, "something" ,sep = "") ),
  USE.NAMES = FALSE
)
vector2
#> [1] "#Asomething" "#Bsomething" "#Csomething" NA            NA           
#> [6] "#Dsomething"

reprex package (v0.3.0)

于 2020-05-04 创建

你可以像这样将它与 ifelse 结合起来

ifelse(is.na(vector1), NA, paste("#", vector1, "something" ,sep = ""))

虽然这已被标记为已回答,但也请参阅@hello_friend 的回答,这可能更合适。