代码之家  ›  专栏  ›  技术社区  ›  nak5120

如果NA存在于列中,则用另一列中的值替换

  •  0
  • nak5120  · 技术社区  · 6 年前

    我有一个数据框如下:

     df
    
     ColA    ColB    ColC
       NA      BN       6
       JH      NA       8
       NA    rewr       9
       NA      NA      10
    

    预期产量:

     newdf
    
     ColA    ColB    ColC   New_Col
       NA      BN       6        BN
       JH      NA       8        JH
       NA    rewr       9      rewr
       NA      NA      10        NA
    

    这是我的尝试,但没有得到我想要的结果:

    newdf<- sqldf("SELECT *, replace([ColA], NULL, [ColB]) [New_Col] from df")
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   akrun    6 年前

    使用 coalesce

    library(sqldf)
    sqldf("SELECT ColA, ColB, ColC, coalesce(ColA, ColB) as New_Col from df")
    #   ColA ColB ColC New_Col
    #1 <NA>   BN    6      BN
    #2   JH <NA>    8      JH
    #3 <NA> rewr    9    rewr
    #4 <NA> <NA>   10     <NA>
    

    或与 tidyverse

    library(dplyr)
    df %>%
       mutate(New_Col = coalesce(ColA, ColB))
    #   ColA ColB ColC New_Col
    #1 <NA>   BN    6      BN
    #2   JH <NA>    8      JH
    #3 <NA> rewr    9    rewr
    #4 <NA> <NA>   10    <NA>
    

    df <- structure(list(ColA = c(NA, "JH", NA, NA), ColB = c("BN", NA, 
     "rewr", NA), ColC = c(6L, 8L, 9L, 10L)), class = "data.frame", row.names = c(NA, 
     -4L))