我有以下索引向量:
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))})
这可以很好地工作,但是在大型数据集中需要花费很多时间。
有什么有效的方法可以改善吗?
答案 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