将数字向量转换为 R 中的连续整数
Convert a vector of a numbers to consecutive integers in R
我有一个整数向量 x <- c(5, 5, 4, 4, 4, 8, 8, 8, 8, 5, 5, 9, 4, 4, 5, 5)
并且想要创建一个相同长度的新向量。这个新向量从 1 开始,如果 x
中的值与前一个值没有变化,则该值保持不变;只要 x
有变化,该值就应该增加 1。所以期望的结果是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
tmp=rle(x)
rep(seq_along(tmp$values),tmp$lengths)
[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
我有一个整数向量 x <- c(5, 5, 4, 4, 4, 8, 8, 8, 8, 5, 5, 9, 4, 4, 5, 5)
并且想要创建一个相同长度的新向量。这个新向量从 1 开始,如果 x
中的值与前一个值没有变化,则该值保持不变;只要 x
有变化,该值就应该增加 1。所以期望的结果是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
tmp=rle(x)
rep(seq_along(tmp$values),tmp$lengths)
[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