首页 > 解决方案 > 从序列创建组

问题描述

如何创建一个“组”向量来识别另一个向量中相同值的序列。

由此

x <- c(0,1,0,0,1,0,1)

我想创建这个

outcome <- c(1,2,3,3,4,5,6)

[1] 0 1 0 0 1 0 1
[1] 1 2 3 3 4 5 6

因此,只要有一个新的相同值序列,就会有一个新的组号(或者也可以是一个数字以外的东西)。


我实际上会知道到达那里的方法,但它们都很可怕。我能想到的最好的是

comparison <- x != lag(x)
cumsum(replace_na(comparison, TRUE))

但就像我说的 - 可怕。必须有更好的方法,我希望有人知道。

标签: r

解决方案


我们可以rleid使用data.table

library(data.table)
rleid(x)
#[1] 1 2 3 3 4 5 6

base Rrle

with(rle(x), rep(seq_along(values), lengths))
#[1] 1 2 3 3 4 5 6

或者,如果我们使用 OP 中的类似方法

1 + cumsum(x != dplyr::lag(x, default = first(x)))

推荐阅读