我有一个整数向量,x <- c(5, 5, 4, 4, 4, 8, 8, 8, 8, 5, 5, 9, 4, 4, 5, 5)
想要创建一个相同长度的新向量。这个新向量从1开始,如果in的值x
与前一个不变,则该值保持不变;只要的值发生变化,该值应增加1 x
。因此,理想的结果是1 1 2 2 2 3 3 3 3 4 4 5 6 6 7 7
。换句话说,结果是中的运行的标签x
。
我现在有一个for
循环,如下所示。但是我想知道是否有某些功能或矢量化的方式来做到这一点。
x <- c(5, 5, 4, 4, 4, 8, 8, 8, 8, 5, 5, 9, 4, 4, 5, 5)
n <- length(x)
y <- rep(NA, n)
y[1] <- 1
for (i in 2:n) {
if (x[i] == x[i - 1]) {
y[i] <- y[i - 1]
}
else {
y[i] <- y[i - 1] + 1
}
}
> y
[1] 1 1 2 2 2 3 3 3 3 4 4 5 6 6 7 7
一种选择是:
cumsum(c(0, diff(x)) != 0) + 1
[1] 1 1 2 2 2 3 3 3 3 4 4 5 6 6 7 7
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句