【问题标题】:How to ignore NA when I paste columns using data.table?使用 data.table 粘贴列时如何忽略 NA?
【发布时间】:2021-04-20 14:28:32
【问题描述】:

我有一个数据框:

ID   value1  value2
1     wad     11
2     NA      NA
3     elf     1

当我这样做时:

dt[,new:=paste0(value1, value2)]

我明白了:

ID   value1  value2   new
1     wad     11      wad11
2     NA      NA      NANA
3     elf     1       elf1

如何忽略 NA?并删除 value1 和 value2?我想得到:

ID   new
1    wad11
2    NA
3    elf1

【问题讨论】:

    标签: r dataframe join data.table paste


    【解决方案1】:

    data.table

    library(data.table)       
    setDT(df)
    df[is.na(df)] <- ''
    df[, new := paste0(value1, value2)][, .(ID, new)]
    

    tidyr::unite 对此有一个单一的解决方案:

    tidyr::unite(df, new, value1, value2, na.rm = TRUE)
    
    #  ID    new
    #1  1 wad_11
    #2  2       
    #3  3  elf_1
    

    【讨论】:

    • 谢谢,我用data.table写了问题
    • @reredf 我用data.table更新了答案。
    • 谢谢,这里 df[is.na(df)]
    • value2 专栏怎么样?您想保留NA 的原样吗?您可以将cols 定义为cols &lt;- c('value1', 'value2'),然后替换NAdf[, (cols) := lapply(.SD, function(x) replace(x, is.na(x), '')), .SDcols = cols]`
    • 是的,我需要从两列中删除 NA,而不是从其他列中删除。它是一个示例数据框,实际上我不想从所有列中删除 na
    【解决方案2】:

    data.table 选项

    setDT(df)[,
      .(ID, new = do.call(paste, c(replace(.SD, is.na(.SD), ""), sep = ""))),
      .SDcols = patterns("^value")
    ]
    

    给予

       ID   new
    1:  1 wad11
    2:  2
    3:  3  elf1
    

    数据

    > dput(df)
    structure(list(ID = 1:3, value1 = c("wad", NA, "elf"), value2 = c(11L,
    NA, 1L)), class = "data.frame", row.names = c(NA, -3L))
    

    【讨论】:

      【解决方案3】:

      我们可以的

      library(dplyr)
      df %>%
         transmute(ID, new = case_when(is.na(value1) & is.na(value2) ~ "",
            TRUE ~str_c(value1, value2, sep='_')))
      #  ID    new
      #1  1 wad_11
      #2  2       
      #3  3  elf_1
      

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-23
        • 1970-01-01
        • 2012-10-17
        • 1970-01-01
        • 2016-08-02
        相关资源
        最近更新 更多