纵向数据集 - 两个日期之间的差异

问题描述

我有一个从 Excel 导入到 R 中的纵向数据集,如下所示:

STUDYID  VISIT#  VISITDate 
1         1      2012-12-19
1         2      2018-09-19
2         1      2013-04-03
2         2      2014-05-14
2         3      2016-05-12

在这个数据集中,每个患者/研究 ID 有不同的就诊次数,他们的首次就诊日期可能因人而异。我想创建一个新的时间变量,它基本上是自第一次访问以来的年数,因此数据集将如下所示:

STUDYID  VISIT#  VISITDate   Time(years)
1         1      2012-12-19    0
1         2      2018-09-19    5
2         1      2013-04-03    0
2         2      2014-05-14    1
2         3      2016-05-12    3

创建这样的时间变量的原因是为了评估随时间变化的微分回归效果(这是一个连续变量)。有没有办法在 R 中创建这样的新时间变量,以便我可以在回归分析中将其用作自变量?

enter image description here

解决方法

加载包:

library(tibble)
library(dplyr)
library(lubridate)

设置数据:

dat <- tribble(~STUDYID,~VISIT,~VISITDate,1,"2012-12-19",2,"2018-09-19","2013-04-03","2014-05-14",3,"2016-05-12") %>% 
  mutate(VISITDate = as.Date(VISITDate)) 

创建想要的变量:

dat %>% 
  group_by(STUDYID) %>% 
  mutate(Time = first(VISITDate) %--% VISITDate,Time = as.numeric(Time,"years")) %>% 
  ungroup()

# A tibble: 5 x 4
  STUDYID VISIT VISITDate   Time
    <dbl> <dbl> <date>     <dbl>
1       1     1 2012-12-19  0   
2       1     2 2018-09-19  5.75
3       2     1 2013-04-03  0   
4       2     2 2014-05-14  1.11
5       2     3 2016-05-12  3.11
,

考虑aveVISITDate组计算STUDYID的最小值,然后取日期差转换为整数年:

df <- within(df,{
        minVISITDate <- ave(VISITDate,STUDYID,FUN=min)
        Time <- floor(as.double(difftime(VISITDate,minVISITDate,unit="days") / 365))
        rm(minVISITDate)
    })

df
#  STUDYID VISIT#  VISITDate Time
# 1      1      1 2012-12-19    0 
# 2      1      2 2018-09-19    5 
# 3      2      1 2013-04-03    0
# 4      2      2 2014-05-14    1 
# 5      2      3 2016-05-12    3

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...