我有一个像这样的 1 和 0 相邻的向量。
vec <- c(1,1,1,0,0,1,1,1,1,0,0,0,1,1,1)
我想用连续 1 显示的数字替换 1,这样最终向量看起来像下面的向量。
vec1 <- c(1,1,1,0,0,2,2,2,2,0,0,0,3,3,3)
我什至不确定如何从这个问题开始。任何帮助,不胜感激。
使用rle
的一种方式:
with(rle(vec), rep(values * cumsum(values), lengths))
#[1] 1 1 1 0 0 2 2 2 2 0 0 0 3 3 3
一个base R
选项可以是:
cumsum(vec & c(0, head(vec, -1)) == 0) * vec
[1] 1 1 1 0 0 2 2 2 2 0 0 0 3 3 3
我们可以使用data.table
中的rleid
library(data.table)
vec[as.logical(vec)] <- as.integer(factor(rleid(vec)[as.logical(vec)]))
vec
#[1] 1 1 1 0 0 2 2 2 2 0 0 0 3 3 3