为时间分层的案例交叉设计创建案例控制对

时间:2013-12-19 08:34:51

标签: r

我计划使用时间分层案例交叉方法设计一项研究,其中每个都是 案件作为他自己的控制。控制日必须相同 同月的工作日。如果一个人星期五住进了医院 某个月,那个月的所有其他星期五将是控制日。根据入学日期和月份,将有3或4个控制。

例如,如果一个人今天(2013年12月27日)入院,全部 12月的周五(6日,13日和20日)将进行控制,从而提供3个控制。 另一方面,如果另一名患者在2014年1月1日星期三的新年入院,则2014年1月的所有其他星期三(8,15,22和29)将成为控制日。

下面的dput显示了我目前拥有的事件日(event_date)和预期的控制日(指示日期)。 我怎么能设置这样的方案? Ť

structure(list(event_date = structure(c(12539, 12539, 12539, 
12539, 12544, 12544, 12544, 12545, 12545, 12545, 12550, 12550, 
12550, 12563, 12563, 12563, 12567, 12567, 12567, 12567, 14065, 
14065, 14065), class = "Date"), referent_date = structure(c(12546, 
12560, 12567, 12553, 12558, 12565, 12551, 12566, 12552, 12559, 
12543, 12557, 12564, 12556, 12542, 12549, 12553, 12539, 12546, 
12560, 14086, 14072, 14079), class = "Date")), .Names = c("event_date", 
"referent_date"), class = "data.frame", row.names = c("1", "2", 
"3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
"15", "16", "17", "18", "19", "20", "21", "22", "23"))

1 个答案:

答案 0 :(得分:1)

如何使用来自lubridate的wday()和month()过滤候选日期?

require(lubridate)

compDates <- function(event_date) {
  # to be comparable, reference dates must have the same month and wday as event
  # but can't be exactly the same date
    possible_refs <- as.Date((event_date - 30) : (event_date + 30), 
                             origin="1970-01-01") 
    possible_refs[month(possible_refs)==month(event_date)
                        & wday(possible_refs)==wday(event_date)
                        & event_date != possible_refs]
}

some_event_dates <- structure(c(12539, 12544, 12545, 12550, 
                                12563, 12567,14065), class = "Date")

some_event_dates

lapply(some_event_dates, compDates)

应提供所需的清单。