前导向量根据另一个向量的未来值取值

Leading vector taking values based on future values of another vector

我有一系列的治疗,每天一次(二元),比如:

trt <- c(0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0)

我想新建一个向量,对应trt的每一个元素,表示后面三个处理是否全为0。比如上面trt的指示向量就是:

indicator <- c(0, 1, 1, 0, 0, 0, 1, 1, 1, NA, NA, NA)

例如第 3-5 天没有治疗(trt[3], trt[4], trt[5] 均为 0)因此第 2 天的指标应等于 1(indicator[2] 应为 1)

indicator只有两个要求:

我如何在 R 中执行此操作?如果这在没有 for 循环的情况下可行,那将是理想的,但不是绝对必要的。

您可以使用zoo::rollsum检查连续3天加起来是否为零。您还需要使用 dplyr::lead 来说明您正在查看 接下来 三天的事实。最后,您需要将结果逻辑向量转换为数值。

总之,这一切都归结为 one-liner(没有循环)

+(dplyr::lead(zoo::rollsum(trt, 3, fill = NA, align = "left")) == 0)
#> [1]  0  1  1  0  0  0  1  1  1 NA NA NA

这是一个基本的 R 选项

> +(rowSums(sapply(seq(3),function(k) `length<-`(trt[-(1:k)],length(trt)))==0)==3)
 [1]  0  1  1  0  0  0  1  1  1 NA NA NA