Вы можете сделать это с помощью индексации.По сути, вы хотите добавлять по одному при каждом изменении значения в столбце.
Определить данные:
R> z <- c(1,1,3,5,5,8)
Все, но последний и все, но первый:
R> head(z,-1)
[1] 1 1 3 5 5
R> z[-1]
[1] 1 3 5 5 8
Сравните, инвертируйте сравнение и затем суммируйте по логическим значениям:
R> z[-1] == head(z,-1)
[1] TRUE FALSE FALSE TRUE FALSE
R> z[-1] != head(z,-1)
[1] FALSE TRUE TRUE FALSE TRUE
R> cumsum(z[-1] != head(z,-1))
[1] 0 1 2 2 3
R>
И затем используйте это, где мы добавляем 1, чтобы компенсировать начальное попарное сравнение:
R> cumsum(c(1, z[-1] != head(z,-1)))
[1] 1 1 2 3 3 4
Таким образом, вы можете использовать такое выражение для замены значения в вашем data.frame
.