【问题标题】:How to make R take values from another column based on criteria?如何使R根据标准从另一列中获取值?
【发布时间】:2021-10-05 20:46:14
【问题描述】:

我有两张表,其中包含从不同数据源离开公司的人员。这两张桌子有不同的长度,并不是每个人都在一张桌子上,也在另一张桌子上。两个表中都有一个离开日期的列。在离开日期的一列中,表中没有缺失值,在另一列中存在一些缺失值。我希望 R 用另一列中的值覆盖该列而不丢失值。

原始数据如下:

   ID    exit1      exit2
1  1        N/A 31/01/2016
2  2 01/02/2016 01/01/2021
3  3 01/10/2010 30/09/2019
4  4        N/A 31/12/2015
5  5 01/01/2016 30/09/2020

我希望我的数据看起来像这样:

  ID      exit2
1  1 31/01/2016
2  2 01/02/2016
3  3 01/10/2010
4  4 31/12/2015
5  5 01/01/2016

谁能帮忙?

谢谢!

【问题讨论】:

    标签: r merge


    【解决方案1】:

    你可以使用

    library(dplyr)
    
    df %>%
      mutate(
        exit = coalesce(na_if(exit1, "N/A"), exit2), 
        .keep = "unused"
        )
    

    返回

    # A tibble: 5 x 2
         ID exit      
      <dbl> <chr>     
    1     1 31/01/2016
    2     2 01/02/2016
    3     3 01/10/2010
    4     4 31/12/2015
    5     5 01/01/2016
    

    数据

    structure(list(ID = c(1, 2, 3, 4, 5), exit1 = c("N/A", "01/02/2016", 
    "01/10/2010", "N/A", "01/01/2016"), exit2 = c("31/01/2016", "01/01/2021", 
    "30/09/2019", "31/12/2015", "30/09/2020")), row.names = c(NA, 
    -5L), class = c("tbl_df", "tbl", "data.frame"))
    

    【讨论】:

      【解决方案2】:

      data.table 包的替代方案:

      library(data.table)
      
      DT[ ,`:=` (exit1 = NULL, exit2 = ifelse(is.na(exit1), exit2, exit1))]
      
      
      DT
      #>    ID      exit2
      #> 1:  1 31/01/2016
      #> 2:  2 01/02/2016
      #> 3:  3 01/10/2010
      #> 4:  4 31/12/2015
      #> 5:  5 01/01/2016
      

      您的数据:

      DT <- data.table(ID = 1:5,
                       exit1 = c(NA, "01/02/2016", "01/10/2010", NA, "01/01/2016"),
                       exit2 = c("31/01/2016", "01/01/2021", "30/09/2019", "31/12/2015", "30/09/2020"))
      

      reprex package 创建于 2021-10-05 (v0.3.0)

      【讨论】:

        猜你喜欢
        • 2020-10-09
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-22
        • 1970-01-01
        相关资源
        最近更新 更多