r - 使用二进制变量创建计数器
问题描述
我正在尝试创建一个计数器变量,每次二进制变量发生变化时,它都会从 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
我明白为什么会这样......我只是不知道如何得到我想要的结果。任何帮助,将不胜感激。
解决方案
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
推荐阅读
- r - R H2O h2o.mojo_predict_df gives odd return inside a function
- python - Numba 优化功能没有速度增益
- python - Python-按属性将类的实例组合在一起
- machine-learning - PAC 学习中的大 O 表示法
- html - Wordpress 中的图像和文本故障
- ruby-on-rails - * 2018 rails: nil:NilClass 的未定义方法“each”
- java - Android Room DAO 如何在单个事务中运行多个 DAO 方法?
- javascript - 如何在文本区域框中下推一行文本?
- mysql - 在 ON DUPLICATE KEY 中选择来自 Insert 语句的值
- php - 需要原始的 Wordpress functions.php 文件