首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于另一个向量的未来值的前导向量取值

基于另一个向量的未来值的前导向量取值
EN

Stack Overflow用户
提问于 2020-09-29 19:42:19
回答 2查看 46关注 0票数 2

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

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

  • Except,那么如果还有<3天的时间来观察

,那就应该是NA了。

我在R里怎么做?如果这是可行的,没有for循环,那将是理想的,但不是绝对必要的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-29 19:47:38

您可以使用zoo::rollsum检查连续3天是否增加到零。您还需要使用dplyr::lead来解释您正在考虑的未来三天的事实。最后,您需要将生成的逻辑向量转换为数字。

总之,这一切归结为这个单线(没有循环)。

代码语言:javascript
复制
+(dplyr::lead(zoo::rollsum(trt, 3, fill = NA, align = "left")) == 0)
#> [1]  0  1  1  0  0  0  1  1  1 NA NA NA
票数 3
EN

Stack Overflow用户

发布于 2020-09-29 20:06:11

这里有一个基本R选项

代码语言:javascript
复制
> +(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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64126560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档