R:一个时间间隔会落在另一个时间区间吗

  • 本文关键字:时间 另一个 区间 一个 r
  • 更新时间 :
  • 英文 :


我有一个数据库,里面有一个id变量和后续的开始/结束日期:

library(dplyr)
library(lubridate)
data <- tibble(id = c(01, 02, 03, 04),
start_date = dmy(c('01-02-1997', '05-03-1998', '09-08-2002', '05-05-1997')),
end_date = dmy(c('03-04-2002', '06-07-2004', '07-04-2010', '03-04-2008')))

我想制作一个df,它需要一段时间(3年期,例如1997年至1999年(,并询问开始和结束日期是否在这段时间内(例如,如果随访从1996年开始,到2000年结束,它们将被计算在1997年至99年和2000年至2003年期间,而不是2003年至2006年期间(。

我想制作一个df,比如:

data <- tibble(id = c(01, 02, 03, 04),
start_date = dmy(c('01-02-1997', '05-03-1998', '09-08-2002', '05-05-1997')),
end_date = dmy(c('03-04-2002', '06-07-2004', '07-04-2010', '03-04-2008')),
y1997.99 = c(1,1,0,1),
y2000.03 =c(1,1,1,1),
y2004.06 =c(0,1,1,1),
y2007.09 = c(0,0,1,1),
y2010.12 = c(0,0,1,0),
y2013.15 = c(0,0,0,0))

有人知道这是怎么实现的吗?谢谢

此函数执行问题所要求的操作。它将以"y"开始的名称除以周期".",并在lapply循环中创建与这些名称相对应的间隔。然后查看向量是否重叠,并组装返回数据.frame.中的所有内容

fun <- function(data){
int <- with(data, interval(start_date, end_date))
nms <- grep("^y", names(data), value = TRUE)
nms <- sub("^y", "", nms)
int_nms <- lapply(strsplit(nms, "\."), function(x){
cent <- substr(x[1], 1, 2)
x[2] <- paste0(cent, x[2])
start <- ISOdate(x[1], "01", "01", 0, 0, 0)
end <- ISOdate(x[2], "12", "31", 23, 59, 59)
interval(start, end)
})
int_nms2 <- lapply(int_nms, function(i) as.integer(int_overlaps(int, i)))
tmp <- do.call(cbind.data.frame, int_nms2)
names(tmp) <- nms
cbind.data.frame(data[1:3], tmp)
}
fun(data)

相关内容

最新更新