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

问题描述 投票:0回答:2

我有以下的向量。

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

我想应用这个函数粘贴,忽略vector1中的NA值。

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

得此

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

我想避免使用sub的前帖子解决方案,在这里,我只是把字符串中含有字母 "NA "的元素去掉。

我看到一个类似的问题。在 paste() 中抑制 NA 但是他们想忽略NA,直接粘贴#something,而我想显示NA。

r paste
2个回答
2
投票

你可以把它和ifelse结合起来,比如说

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

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


3
投票

基础R的解决方案。

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

1
投票

我认为你需要使用 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"

创建于2020-05-04,由 重读包 (v0.3.0)

© www.soinside.com 2019 - 2024. All rights reserved.