【问题标题】:How to calculate time difference between different rows based off criteria/conditions in R如何根据 R 中的标准/条件计算不同行之间的时间差
【发布时间】:2021-01-14 08:42:19
【问题描述】:

我有以下数据框,我希望创建一个变量来计算当前 ADMITDATE 与前一个 DISCHARGE DATE 之间的天数,仅用于重复或 IDs 相等时

ID  ADMITDATE   DISCHARGE DATE  
1   5/24/2020   5/27/2020   
1   5/30/2020   6/15/2020   
2   3/9/2010    4/5/2020    
3   2/7/2020    3/7/2020    
4   5/15/2020   5/16/2020   
4   5/20/2020   5/25/2020   
4   5/30/2020   6/15/2020   
5   7/8/2020    7/20/2020   
6   1/20/2020   1/22/2020   
6   1/28/2020   2/5/2020    

所以我希望输出如下所示。

ID    ADMITDATE     DISCHARGE DATE  DAYDIFF

1   5/24/2020   5/27/2020   NULL

1   5/30/2020   6/15/2020   3

2   3/9/2010    4/5/2020    NULL

3   2/7/2020    3/7/2020    NULL

4   5/15/2020   5/16/2020   NULL

4   5/20/2020   5/25/2020   4

4   5/30/2020   6/15/2020   5

5   7/8/2020    7/20/2020   NULL

6   1/20/2020   1/22/2020   NULL

6   1/28/2020   2/5/2020    6

关于如何在 R 中为此编写代码的任何提示?

我目前拥有的代码是

df$DAYDIFF <- [df$ID==lag(ID)] <- as.Date(as.character(test$ADMITDATE), format="%m/%d/%Y")-
  lag(as.Date(as.character(test$DISCHARGEDATE), format="%m/%d/%Y"))

【问题讨论】:

    标签: r duplicates conditional-statements calculation


    【解决方案1】:

    假设您的数据存储在名为 df 的数据框中:

    library(tidyverse)
    library(lubridate)
    
    df %>% 
         mutate(ADMITDATE = mdy(ADMITDATE),
                DISCHARGEDATE = mdy(DISCHARGEDATE)) %>% 
         group_by(ID) %>% 
         mutate(DAYDIFF = ADMITDATE - lag(DISCHARGEDATE, 1))
    

    mutate 调用将您的列转换为日期格式,使用 lubridate 将格式指定为月-日-年。然后我们group_byID 的值,然后计算当前ADMITDATE 和之前DISCHARGEDATE 之间的差异(使用lag()

    【讨论】:

    • 谢谢@stlba
    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2020-03-26
    相关资源
    最近更新 更多