我需要以特定方式索引矢量
例如,我有以下向量:
x = c(1,1,2,3,1,1,2,3)
函数的输出必须返回这样的向量
[1,1,2,3,4,4,5,6]
如果数字在向量x
中重复,那么输出向量必须将索引处理为相同的数字
该功能必须仅考虑连续重复的数字
这是我试图做的事情
svector <- function(x){
y = c()
for (i in 1:NROW(x)){
if((x[-length(x)] == x[-1])){
y[i] = y[i+1]
}else{
next
}
}
}
在我的程序中,我尝试读取向量中的第一个和第二个条目,比较是否相同,然后在空向量中y
插入条目
答案 0 :(得分:0)
rleid
包中的data.table
函数正是出于此目的。应该快很多倍。
x <- sample(1:5e4, 1e6, T)
all.equal(rleid(x), cumsum(x != lag(x, default = 0)))
# TRUE
library(microbenchmark)
microbenchmark(custom = cumsum(x != lag(x, default = 0)),
rleid = rleid(x), unit = 'relative')
# Unit: relative
# expr min lq mean median uq max neval
# custom 5.481059 6.52852 4.660912 6.816693 5.586913 1.550265 100
# rleid 1.000000 1.00000 1.000000 1.000000 1.000000 1.000000 100