我正在尝试创建一个与逻辑向量长度相同的有序整数向量。列表从1开始,并以该值继续,直到遇到TRUE
,这会触发下一个元素的增加,依此类推,直到解析所有逻辑为止。
我已经在for
循环中完成了这项工作,但是我需要在不同的小组中重复多次此过程,并且想知道是否建议使用更有效的方法。
dat <- c(TRUE, FALSE, TRUE, TRUE, FALSE,
TRUE, TRUE, TRUE, TRUE, FALSE,
TRUE, FALSE, TRUE, FALSE, TRUE,
FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
counter <- 1
output <- c()
for (i in dat) {
output <- c(output, counter)
if(i == T)
counter <- counter + 1
}
output
> [1] 1 2 2 3 4 4 5 6 7 8 8 9 9 10 10 11 11 11 12 13 14
谢谢。
根据史蒂芬妮的评论-c(1, 1+cumsum(dat))[1:length(dat)]
很好,谢谢!
答案 0 :(得分:3)
我们可以将Test.proj
与附加的cumsum
值配合使用,因为我们要在后看到一个FALSE
值而不是 TRUE
值。
TRUE
自从我们添加了一个额外的cumsum(c(F, dat)) + 1
#[1] 1 2 2 3 4 4 5 6 7 8 8 9 9 10 10 11 11 11 12 13 14 15
值以来,我们需要删除最后一个值,因为它会给我们FALSE
个条目。
n+1