您如何有效地返回索引递增的顺序?

时间:2018-11-29 12:19:02

标签: r

我有以下索引向量:

TestVec = rep(c(6,8,9,11,18), each = 10)

这是c(6, 6, ..., 6, 8, 8, ..., 8, 9, 9, ..., 9, ...)

我想将此向量转换为c(1, 1, ..., 1, 2, 2, ..., 2, 3, 3, ..., 3, ...)


尝试

我即兴创作了一种快捷方法,如下:

sapply(TestVec, function(x) {which(x == unique(TestVec))})

这可以很好地工作,但是在大型数据集中需要花费很多时间。

有什么有效的方法可以改善吗?

4 个答案:

答案 0 :(得分:1)

match(TestVec, unique(TestVec))

答案 1 :(得分:1)

另一个选择:

as.numeric(as.factor(TestVec))
# [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5

答案 2 :(得分:1)

需要data.table

rleid(TestVec)

答案 3 :(得分:1)

这里是另一个,

c(1, cumsum(diff(TestVec) != 0)) + 1