有没有比使用循环更快的方法来创建计数器索引?对于每个相邻的相同值运行,索引应该是相同的。当数据非常大时,我发现循环非常慢。
以下是输入和期望输出的示例:
x <- c(2, 3, 9, 2, 4, 4, 3, 4, 4, 5, 5, 5, 1)
期望得到的计数器:
c(1, 2, 3, 4, 5, 5, 6, 7, 7, 8, 8, 8, 9)
注意,不连续的序列具有不同的索引。例如,请查看值2
和4
的期望索引。我的低效代码如下:
group[1]<-1
counter<-1
for (i in 2:n){
if (x[i]==x[i-1]){
group[i]<-counter
}else{
counter<-counter+1
group[1]<-counter}
}
data.table
答案进行评估。 - Jotarleid()
版本。在这里,diff(x)
、c(...)
、!=
和cumsum()
都会分配新的内存空间,这意味着它需要原始数据的大约4倍的空间! - Arun