如何优雅地用不同的向量替换重复的值?
how to elegantly substitute repeated values with a different vector?
在 R 中,像这样的向量:
x <- c(0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,1)
我希望 x 是这样的:
y = c(0,0,1,1,0,0,2,2,0,0,3,3,3,3,0,4,0,5,0,6)
谁能帮我解决这个问题?
一个选项是rle
inverse.rle(within.list(rle(x), values[values!=0] <- seq_along(values[values!=0])))
#[1] 0 0 1 1 0 0 2 2 0 0 3 3 3 3 0 4 0 5 0 6
或 rleid
来自 data.table
library(data.table)
x1 <- x*rleid(x)
match(x1, unique(x1[x1!=0]), nomatch = 0)
#[1] 0 0 1 1 0 0 2 2 0 0 3 3 3 3 0 4 0 5 0 6
在 R 中,像这样的向量:
x <- c(0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,1)
我希望 x 是这样的:
y = c(0,0,1,1,0,0,2,2,0,0,3,3,3,3,0,4,0,5,0,6)
谁能帮我解决这个问题?
一个选项是rle
inverse.rle(within.list(rle(x), values[values!=0] <- seq_along(values[values!=0])))
#[1] 0 0 1 1 0 0 2 2 0 0 3 3 3 3 0 4 0 5 0 6
或 rleid
来自 data.table
library(data.table)
x1 <- x*rleid(x)
match(x1, unique(x1[x1!=0]), nomatch = 0)
#[1] 0 0 1 1 0 0 2 2 0 0 3 3 3 3 0 4 0 5 0 6