-5
Я сделал функцию, чтобы увеличить счетчик всякий раз, когда значение в векторе изменений:Увеличение счетчика при изменении значения
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? (Он также должен иметь возможность отслеживать изменения в нечисловых векторов, в том числе. Списки.)
Спасибо. Решение 'for loop' на самом деле примерно на 5-10% быстрее, чем' rle' подход по моим данным (только FYI). – jakub
@jakub Я бы сказал, что вы должны проверить тесты на более крупном наборе данных, то есть около миллиона или более данных – akrun