每当矢量中的值发生变化时,我都会创建一个增加计数器的函数:
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
}
示例(了解track
每次更改后carb
的变化情况):
mtcars$track = track_change(mtcars$carb)
head(mtcars[, 10:12])
gear carb track
Mazda RX4 4 4 0
Mazda RX4 Wag 4 4 0
Datsun 710 4 1 1
Hornet 4 Drive 3 1 1
Hornet Sportabout 3 2 2
Valiant 3 1 3
在R中有更好的方法吗? (它还应该能够跟踪非数字向量的变化,包括列表。)
答案 0 :(得分:0)
我们可以使用rleid
data.table
执行此操作
library(data.table)
rleid(mtcars$carb)-1
或rle
base R
inverse.rle(within.list(rle(mtcars$carb), values <- seq_along(values))) - 1