首页 > 解决方案 > 使用二进制变量创建计数器

问题描述

我正在尝试创建一个计数器变量,每次二进制变量发生变化时,它都会从 1 开始。

bin <- c(1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0)
df <- as.data.frame(bin)

df <- df %>%
  group_by(bin) %>%
  mutate(cntr = row_number())

我想得到以下结果:

bin  cntr
1    1
0    1
0    2
1    1
1    2
1    3
...

但相反,我得到:

1    1
0    1
0    2
1    2
1    3
1    4

我明白为什么会这样......我只是不知道如何得到我想要的结果。任何帮助,将不胜感激。

标签: rcounter

解决方案


sequence您可以通过组合和轻松做到这一点rle。不需要包裹。

data.frame(bin, cntr = sequence(rle(bin)$lengths))
#   bin cntr
#1    1    1
#2    0    1
#3    0    2
#4    1    1
#5    1    2
#6    1    3
#7    1    4
#8    1    5
#9    0    1
#10   0    2
#11   0    3
#12   0    4
#13   1    1
#14   0    1
#15   1    1
#16   0    1

推荐阅读