R 值改变时增加计数器
我做了一个函数,每当向量中的值发生变化时,增加一个计数器:R 值改变时增加计数器,r,R,我做了一个函数,每当向量中的值发生变化时,增加一个计数器: track_change = function(x) { counter = numeric(length(x)) for (i in seq_along(x)) { if (i > 1 && x[i] != x[i-1]) counter[i] = counter[i-1] + 1 else if (i > 1) counter[i] = counter[i-
track_change = function(x) {
counter = numeric(length(x))
for (i in seq_along(x)) {
if (i > 1 && x[i] != x[i-1])
counter[i] = counter[i-1] + 1
else if (i > 1)
counter[i] = counter[i-1]
}
counter
}
示例(请参见每次更改carb
时如何更改跟踪
):
有没有更好的方法在R中实现这一点?(它还应该能够跟踪非数字向量的变化,包括列表。)我们可以通过
数据中的rleid
来实现这一点
library(data.table)
rleid(mtcars$carb)-1
或者使用rle
frombase R
inverse.rle(within.list(rle(mtcars$carb), values <- seq_along(values))) - 1
inverse.rle(in.list(rle)(mtcars$carb),谢谢。在我的数据上,for loop
解决方案实际上比rle
方法快5-10%(仅供参考)。@jakub我想说,你应该在一个更大的数据集上检查基准,即大约一百万或更多的数据点
inverse.rle(within.list(rle(mtcars$carb), values <- seq_along(values))) - 1