如何解决基于另一个向量的未来值的前导向量取值
我有一系列的治疗方法,每天(二进制)一次,比如:
trt <- c(0,1,0)
我想创建一个新向量,该向量对应于trt
的每个元素,并指示NEXT三种处理是否全部为0。例如,上述trt
的指标向量为:
indicator <- c(0,NA,NA)
例如3-5天没有任何治疗(trt[3],trt[4],trt[5]
全部为0),因此第2天的指标应等于1(indicator[2]
应该为1)
indicator
仅有两个要求:
- 如果接下来的三天不接受治疗,则为1
- 如果接下来的三天至少要接受一次治疗,则为0
- 如果还剩下3天需要观察,则应该为NA
我将如何在R中执行此操作?如果没有for循环就可以做到这一点,那将是理想的选择,但并非绝对必要。
解决方法
您可以使用zoo::rollsum
来检查连续3天是否为零。您还需要使用dplyr::lead
来说明您正在查看 next 三天的事实。最后,您需要将结果逻辑向量转换为数字。
无论如何,一切都归结为这种一线(无循环)
+(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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。