Вот один из способов использования dplyr
.Мы вместе paste
Unique
и Value
столбец (col
), создаем инкрементный счетчик для каждого изменения в col
, group_by
Unique
и Value
вместе и создаем столбец ранжирования с dense_rank
.
library(dplyr)
df %>%
mutate(col = paste(Unique, Value, sep ="_"),
group = cumsum(col != lag(col, default = first(col)))) %>%
group_by(Unique, Value) %>%
mutate(ID = dense_rank(group)) %>%
select(-group)
# Unique Value col ID
# <fct> <fct> <chr> <int>
# 1 jack A jack_A 1
# 2 jack A jack_A 1
# 3 jack A jack_A 1
# 4 bill B bill_B 1
# 5 bill B bill_B 1
# 6 rick C rick_C 1
# 7 jack D jack_D 1
# 8 jack D jack_D 1
# 9 bill A bill_A 1
#10 rick A rick_A 1
#11 jack A jack_A 2
#12 jack A jack_A 2
#13 jack A jack_A 2
При необходимости вы можете удалить столбец col
в конечном выводе.
данные
df <- structure(list(Unique = structure(c(2L, 2L, 2L, 1L, 1L, 3L, 2L,
2L, 1L, 3L, 2L, 2L, 2L), .Label = c("bill", "jack", "rick"), class = "factor"),
Value = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 4L, 4L, 1L, 1L,
1L, 1L, 1L), .Label = c("A", "B", "C", "D"), class = "factor")), row.names = c(NA,
-13L), class = "data.frame")