【发布时间】:2019-06-27 15:03:46
【问题描述】:
我在 885.630 名患者的数据集中按月计算一组慢性病的患病率。每个患者都有三个主要信息:(1)df$min,第一次出现在数据集中的日期; (2) df$max - 最后一次出现在数据集中; (3) df$HBP,例如患者被诊断为高血压的日期。所有三个变量都是日期。我使用结合 df$min 和 df$max 的 lubridate::interval 函数创建了另一个名为 df$interval 的变量,以允许我仅在该时间段内使用分母中的患者。每个患者都有特定的 df$min 和 df$max,这给计算每 82 个月的患病率带来了一些麻烦,因为分子和分母每个新月都会变化,而且患者必须仅在一段时间内被视为“病例”从 df$condition 到该特定患者的 df$max。
我已经通过为每 82 个月创建虚拟变量来解决问题的第一部分,这将允许我计算患病率,但我确信除了在同一行重复 82 次之外还有更简单的方法代码。
library(lubridate)
HBP <- as.Date(c(NA, NA, "2013-08-01", NA, "2017-11-01", NA, NA, NA, NA, NA))
min <- as.Date(c("2017-05-19", "2013-03-27", "2013-08-01", "2013-04-24", "2013-05-08",
"2013-03-21","2013-04-08","2013-08-01","2016-09-12", "2016-06-13"))
max <- as.Date(c("2017-05-19","2014-09-12","2018-09-24","2013-04-24","2018-07-31",
"2018-04-17","2018-04-11","2017-02-07","2016-09-12", "2016-06-13"))
df <- data.frame(HBP, min, max)
month <- round_date(seq.Date(as.Date("2012-02-02"), as.Date("2018-11-08"), by = "months"), "month") # those are the min and max values of consultations in the dataset.
df$interval <- interval(df$min, df$max)
df$month1 <- month[1] %within% df$interval
df$month2 <- month[2] %within% df$interval
# repeat 82 times - here is my first issue: Is there am easier way to do it?
df$month65 <- month[65] %within% df$interval
因此,虚拟变量显示 TRUE(患者将在该月的分子中)或 FALSE。它正在工作,但我仍有一些问题:
创建这些变量“month1”、“month2”、“monthn”的简单方法是什么?
有没有一种直接的方法来计算每个月的患病率,而无需为每个月创建虚拟变量?结果将是一个包含 82 行(每个月一个)和列的数据框,其中包含每种慢性病的患病率。
【问题讨论】: