用R中的逻辑向量触发的增量值创建列表

时间:2018-08-02 08:04:24

标签: r

我正在尝试创建一个与逻辑向量长度相同的有序整数向量。列表从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)]很好,谢谢!

1 个答案:

答案 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