Это определенно не превосходит разницу с точки зрения элегантности, но по-другому:
sum(x[-1] != head(x, n=-1))
В моей системе это кажется немного быстрее:
> x <- rbinom(1e6, 1, 0.5)
> system.time(replicate(100, sum(x[-1] != head(x, n=-1))))
user system elapsed
8.421 3.688 12.150
> system.time(replicate(100, sum(diff(x) != 0)))
user system elapsed
9.431 4.525 14.248
Похоже, должно быть хорошее аналитическое решение для распределения числа неравных соседних элементов в последовательности.