【问题标题】:How to calculate days of readmission如何计算再入院天数
【发布时间】:2020-06-26 04:27:53
【问题描述】:

从以下数据框中,我想从每个 ID 中创建一个新列,其中包含从出院日期到下一个入场日期之间的天数。 我知道如何通过减去行之间或列之间的日期来获得天数,但是在这种情况下,我需要减去列之间和行之间的日期(对角线)

df <- data.table(id = c("A", "A", "A", "B", "B", "B", "C", "C"), 
           admission_date = as.Date(c("2017-01-01", "2017-02-01", "2017-05-01", "2017-01-01", "2017-05-01", "2017-10-01", "2017-01-01", "2017-02-01")), 
           discharge_date = as.Date(c("2017-01-04", "2017-02-05", "2017-05-06", "2017-01-03", "2017-05-09", "2017-10-04", "2017-01-06", "2017-02-01")))

我希望得到这样的结果:

df <- data.table(id = c("A", "A", "A", "B", "B", "B", "C", "C"), 
                 admission_date = as.Date(c("2017-01-01", "2017-02-01", "2017-05-01", "2017-01-01", "2017-05-01", "2017-10-01", "2017-01-01", "2017-02-01")), 
                 discharge_date = as.Date(c("2017-01-04", "2017-02-05", "2017-05-06", "2017-01-03", "2017-05-09", "2017-10-04", "2017-01-06", "2017-02-01")))
                 DayReadmission <- c("NA", "28", "85", "NA", "118", "145", "NA", "26")

我刚刚开始使用 R,并尝试了各种建议。但是,它们都不符合我的需求。

【问题讨论】:

  • 您正在寻找lag

标签: r date datetime


【解决方案1】:

您可以使用shift 从上一行获取值。

library(data.table)
df[, DayReadmission := as.numeric(admission_date - shift(discharge_date)), id]

df
#   id admission_date discharge_date DayReadmission
#1:  A     2017-01-01     2017-01-04             NA
#2:  A     2017-02-01     2017-02-05             28
#3:  A     2017-05-01     2017-05-06             85
#4:  B     2017-01-01     2017-01-03             NA
#5:  B     2017-05-01     2017-05-09            118
#6:  B     2017-10-01     2017-10-04            145
#7:  C     2017-01-01     2017-01-06             NA
#8:  C     2017-02-01     2017-02-01             26

【讨论】:

    【解决方案2】:

    这个怎么样:

    library(tidyverse)
    df <- df %>% 
      group_by(id) %>% 
      mutate(DayReadmission = admission_date - lag(discharge_date))
    

    【讨论】:

    • 谢谢!我试过了,成功解决了我的问题
    【解决方案3】:

    由于您是 R 新手,因此这是“老派”方法。

    df$DayReadmission <- unlist(lapply(split(df, df$id), 
           FUN=function(x) x$admission_date - lag(x$discharge_date)))
    
    #  id admission_date discharge_date DayReadmission
    #1  A     2017-01-01     2017-01-04             NA
    #2  A     2017-02-01     2017-02-05             28
    #3  A     2017-05-01     2017-05-06             85
    #4  B     2017-01-01     2017-01-03             NA
    #5  B     2017-05-01     2017-05-09            118
    #6  B     2017-10-01     2017-10-04            145
    #7  C     2017-01-01     2017-01-06             NA
    #8  C     2017-02-01     2017-02-01             26
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      相关资源
      最近更新 更多