【问题标题】:R - Check for same values in two different data framesR - 检查两个不同数据帧中的相同值
【发布时间】:2020-11-02 14:29:27
【问题描述】:

我有一个看起来像这样的数据框(数据)。用于测试 COVID 的数据框:

> ID        DATE           Result
  1        1/11/2020       POSITIVE
  2        1/11/2020       NEGATIVE
  2        2/11/2020       POSITIVE
  3        2/11/2020       POSITIVE
  3        3/11/2020       NEGATIVE
  

然后我有另一个看起来像这样的数据框(data_new),它只是 POSITIVE 结果

> ID        DATE           Result
  1        1/11/2020       POSITIVE
  2        2/11/2020       POSITIVE
  3        2/11/2020       POSITIVE
  

原始数据集非常大。 我的愿望是找到一个带“data_new”的代码,并在“data”中查看是否有相同的ID出现在“data”中,并在阳性结果之前进行了测试。

这可能吗?

【问题讨论】:

    标签: r dataframe compare


    【解决方案1】:

    这行得通吗:

    library(dplyr)
    library(tidyr)
    df2 %>% left_join(df1, by = 'ID') %>% filter((DATE.x > DATE.y) & Result.x == 'POSITIVE')
    # A tibble: 1 x 5
         ID DATE.x     Result.x DATE.y     Result.y
      <dbl> <date>     <chr>    <date>     <chr>   
    1     2 2020-11-02 POSITIVE 2020-11-01 NEGATIVE
    

    使用的数据:

    df1
    # A tibble: 5 x 3
         ID DATE       Result  
      <dbl> <date>     <chr>   
    1     1 2020-11-01 POSITIVE
    2     2 2020-11-01 NEGATIVE
    3     2 2020-11-02 POSITIVE
    4     3 2020-11-02 POSITIVE
    5     3 2020-11-03 NEGATIVE
    df2
    # A tibble: 3 x 3
         ID DATE       Result  
      <dbl> <date>     <chr>   
    1     1 2020-11-01 POSITIVE
    2     2 2020-11-02 POSITIVE
    3     3 2020-11-02 POSITIVE
     
    

    【讨论】:

      【解决方案2】:

      由于您有相似的列名,我建议在加入数据之前重命名列名。对于每个ID,您可以检查他们是否在阳性结果日期之前进行了测试。

      library(dplyr)
      
      df1 %>% 
        rename(test_date = DATE) %>%
        left_join(df2 %>% 
                    rename(positive_date = DATE, final_result = Result), by = 'ID') %>%
        mutate(across(c(test_date, positive_date), lubridate::dmy)) %>%
        group_by(ID) %>%
        summarise(test_before = any(first(positive_date) > test_date))
      
      #    ID test_before
      #  <int> <lgl>      
      #1     1 FALSE      
      #2     2 TRUE       
      #3     3 FALSE      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-18
        • 2022-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多