我有一系列的治疗,每天一次(二进制),比如说:
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只有两个要求
如果接下来的三天没有治疗,如果接下来的三天至少有一次treatment
,那就应该是NA了。
我在R里怎么做?如果这是可行的,没有for循环,那将是理想的,但不是绝对必要的。
发布于 2020-09-29 19:47:38
您可以使用zoo::rollsum检查连续3天是否增加到零。您还需要使用dplyr::lead来解释您正在考虑的未来三天的事实。最后,您需要将生成的逻辑向量转换为数字。
总之,这一切归结为这个单线(没有循环)。
+(dplyr::lead(zoo::rollsum(trt, 3, fill = NA, align = "left")) == 0)
#> [1] 0 1 1 0 0 0 1 1 1 NA NA NA发布于 2020-09-29 20:06:11
这里有一个基本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 NAhttps://stackoverflow.com/questions/64126560
复制相似问题