Create group names for consecutive values
Using rleid
from data.table
,
library(data.table)
paste0('Group_', rleid(x))
#[1] "Group_1" "Group_1" "Group_1" "Group_2" "Group_2" "Group_2" "Group_3" "Group_4" "Group_4" "Group_5" "Group_5"
Using diff
and cumsum
:
paste0("Group_", cumsum(c(1, diff(x) != 0)))
#[1] "Group_1" "Group_1" "Group_1" "Group_2" "Group_2" "Group_2" "Group_3" "Group_4" "Group_4" "Group_5" "Group_5"
(If your values are floating point values, you might have to avoid !=
and use a tolerance instead.)
Using cumsum but not relying on the data being numeric:
paste0("Group_", 1 + c(0, cumsum(x[-length(x)] != x[-1])))
[1] "Group_1" "Group_1" "Group_1" "Group_2" "Group_2" "Group_2" "Group_3" "Group_4" "Group_4" "Group_5" "Group_5"