问题描述
我有一个从 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 中创建这样的新时间变量,以便我可以在回归分析中将其用作自变量?
解决方法
加载包:
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
,
考虑ave
按VISITDate
组计算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