【问题标题】:Paste two columns in R but NAs are included in new column [duplicate]在 R 中粘贴两列,但新列中包含 NA [重复]
【发布时间】:2021-07-20 12:29:19
【问题描述】:

我正在尝试使用以下方法在 R 中混合两列:

df_new$conc_variable <- paste(df$var1, df$var2)

我的数据集如下所示:

id  var1   var2
1   10     NA
2   NA     8
3   11     NA
4   NA     1

我试图让它有第三列:

id  var1   var2  conc_var
1   10     NA    10
2   NA     8     8
3   11     NA    11
4   NA     1     1

但我得到了:

id  var1   var2  conc_var
1   10     NA    10NA
2   NA     8     8NA
3   11     NA    11NA
4   NA     1     1NA

有没有办法在粘贴过程中排除 NA?我尝试包括 na.rm = FALSE 但只是添加了 FALSE 在 conc_var 列中添加了 NA 的结尾。这是数据集:

id <- c(1,2,3,4)
var1 <- c(10, NA, 11, NA)
var2 <- c(NA, 8, NA, 1)
df <- data.frame(id, var1, var2)

【问题讨论】:

    标签: r na


    【解决方案1】:

    众多选项之一是使用ifelse,如:

    df <- data.frame(var1 = c(10, NA, 11, NA),
                     var2 = c(NA, 8, NA, 1))
    
    df$new <- ifelse(is.na(df$var1), yes = df$var2, no = df$var1)
    
    
    print(df)
    

    视情况而定,rowSums 可能也适合

    df$new2 <- rowSums(df[, c("var1", "var2")], na.rm = TRUE)
    
    print(df)
    

    【讨论】:

      【解决方案2】:

      你可以使用tidyr::unite -

      df <- tidyr::unite(df, conc_var, var1, var2, na.rm = TRUE, remove = FALSE)
      df
      
      #  id conc_var var1 var2
      #1  1       10   10   NA
      #2  2        8   NA    8
      #3  3       11   11   NA
      #4  4        1   NA    1
      

      就像在示例中一样,如果一次只有一个值,您也可以使用pmaxcoalesce

      pmax(df$var1, df$var2, na.rm = TRUE)
      dplyr::coalesce(df$var1, df$var2)
      

      【讨论】:

        【解决方案3】:

        您可以改用glue 包中的glue

        glue::glue(10, NA, .na = '')

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-18
          • 1970-01-01
          • 2017-04-23
          • 1970-01-01
          • 1970-01-01
          • 2018-12-02
          • 2022-12-07
          • 1970-01-01
          相关资源
          最近更新 更多