r语言中的索引向量

时间:2018-05-23 20:33:02

标签: r vector indexing

我需要以特定方式索引矢量

例如,我有以下向量:

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插入条目

1 个答案:

答案 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