纵向数据集 - 两个日期之间的差异
Longitudinal dataset - difference between two dates
我有一个从 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
在这个数据集中,每个 patient/study 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 , 1 , "2012-12-19",
1 , 2 , "2018-09-19",
2 , 1 , "2013-04-03",
2 , 2 , "2014-05-14",
2 , 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
通过STUDYID
组计算VISITDate
的最小值,然后将日期差转换为整数年:
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
我有一个从 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
在这个数据集中,每个 patient/study 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 , 1 , "2012-12-19",
1 , 2 , "2018-09-19",
2 , 1 , "2013-04-03",
2 , 2 , "2014-05-14",
2 , 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
通过STUDYID
组计算VISITDate
的最小值,然后将日期差转换为整数年:
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