Существуют различные способы сделать это. Мы можем сравнить каждый элемент с его следующим элементом и посчитать, сколько раз значение отличается
x <- c(1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0)
sum(x[-1] != x[-length(x)])
#[1] 7
Та же логика может применяться с head
и tail
sum(head(x, -1) != tail(x, -1))
dplyr::lag
sum(x != dplyr::lag(x), na.rm = TRUE)
и data.table::shift
sum(x != data.table::shift(x), na.rm = TRUE)
Мы также можем использовать rle
или rleid
и подсчитать количество уникальных групп и вычесть 1поскольку мы не хотим считать уникальное значение в конце группы.
length(rle(x)$lengths) - 1
и
max(data.table::rleid(x)) - 1