Один вариант с rleid
из data.table
. После преобразования в data.table
(setDT(df)
) сгруппируйте по идентификатору длины прогона «V3», replace
последний элемент «V2» с first
для «V1» и назначьте (:=
) это к 'V2'
library(data.table)
setDT(df)[, V2 := replace(V2, .N, first(V1)), rleid(V3)]
df
# V1 V2 V3
#1: 1 2 1
#2: 2 3 1
#3: 3 4 1
#4: 4 1 1
#5: 5 6 2
#6: 6 7 2
#7: 7 5 2
#8: 9 10 3
#9: 10 9 3
Данные
df <- structure(list(V1 = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 9L, 10L), V2 = c(2L,
3L, 4L, 5L, 6L, 7L, 8L, 10L, 11L), V3 = c(1L, 1L, 1L, 1L, 2L,
2L, 2L, 3L, 3L)), class = "data.frame", row.names = c(NA, -9L
))