将 Value 替换为一组数字到该点为止在向量中出现的次数

  • 本文关键字:向量 替换 Value 数字 一组 r
  • 更新时间 :
  • 英文 :


我有一个像这样的 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

最新更新