Подход
data.table с использованием rowidv()
dt_1[, seq := rowidv( dt_1, cols= c( "ID", "type" ) ) ][]
# ID type seq
# 1: 1 AA 1
# 2: 1 B 1
# 3: 1 C 1
# 4: 1 D 1
# 5: 1 AA 2
# 6: 1 B 2
# 7: 1 D 2
# 8: 1 AA 3
# 9: 1 C 2
# 10: 2 AA 1
# 11: 2 C 1
# 12: 2 F 1
# 13: 2 D 1
# 14: 3 AA 1
# 15: 3 E 1
# 16: 3 C 1
из файла справки: rowidv(DT, cols=c("x", "y"))
эквивалентен столбцу N в коде DT[, N := seq_len(.N), by=c("x", "y")]
.