Прежде всего, спасибо за отправку полного и воспроизводимого примера.
Во-вторых, мне нравится ваше решение. Вам может быть трудно сделать это намного быстрее, но при этом держать его простым. Одним из решений является JST работать с базовой матрицей (а не с объектом зоопарка):
> X <- coredata(x)
> t(apply(X, 1, rank))
a b c
[1,] 1 3 2
[2,] 1 2 3
[3,] 1 2 3
>
и затем повторно прикрепить индекс времени. Это может быть быстрее, но не обязательно более оборонительным или более легко читаемым.