【问题标题】:R Paste - ignore cases where at least one element I am pasting is NAR 粘贴 - 忽略我粘贴的至少一个元素为 NA 的情况
【发布时间】:2020-05-04 11:27:42
【问题描述】:

我有以下向量:

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”的元素。

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

【问题讨论】:

    标签: r paste


    【解决方案1】:

    你可以像这样把它和 ifelse 结合起来

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

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

    【讨论】:

      【解决方案2】:

      基础 R 解决方案:

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

      【讨论】:

      • 没有看到你的答案,这几乎是一样的。为什么你使用NA_character_ 而不仅仅是NA
      • @machine NA 是逻辑类型,NA_character 是字符类型。 vector_1 是字符向量,vector_2 也是明确的字符向量。
      • 但这不是 OP 要求的另一个向量吗? c("#Asomething", "#Bsomething" , "#Csomething" ,NA , NA, "#Dsomething")
      • @machine No. 是打字的问题。与向量的 data.type 一样,显式键入可防止意外类型转换的任何问题;在这种情况下,当 OP 想要一个字符向量时,一个意想不到的后果可能是转换为因子向量。
      • 我明白了。 +1 来自我!不知道可以在某个类中定义NA。
      【解决方案3】:

      我认为您需要将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 年 5 月 4 日创建

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 2021-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-07
        相关资源
        最近更新 更多