Самый простой прогноз — предположить, что последовательность букв будет повторяться для каждого id_num.  Я надеюсь, что это соответствует тому, что ОП понимает под предсказанием.
Код
library(data.table)
DT[, .(Events = append(Events, head(rep(Events, 3L), 3L))), by = id_num]
создает
    id_num Events
 1:      1      A
 2:      1      B
 3:      1      C
 4:      1      D
 5:      1      E
 6:      1      A
 7:      1      B
 8:      1      C
 9:      2      B
10:      2      E
11:      2      B
12:      2      E
13:      2      B
14:      3      E
15:      3      A
16:      3      E
17:      3      A
18:      3      E
19:      3      A
20:      3      E
21:      4      C
22:      4      C
23:      4      C
24:      4      C
25:      5      F
26:      5      G
27:      5      F
28:      5      G
29:      5      F
    id_num Events
data.table используется здесь из-за простой в использовании функции группировки и потому, что я знаком с ней.
Объяснение
Для каждого id_num существующая последовательность букв реплицируется 3 раза с использованием rep(), чтобы обеспечить достаточное количество значений для заполнения как минимум 3 следующих значений.  Но только первые 3 значения берутся с использованием head().  Эти 3 значения добавляются к существующей последовательности для каждого id_num
Немного тюнинга
Возможны две оптимизации:
- Если последовательность значений намного длиннее, чем количество значений для прогнозирования n_pred, простое повторение длинной последовательностиn_predраз будет пустой тратой времени.
- Вызова append()можно избежать, если существующая последовательность будет повторяться еще раз.
Итак, оптимизированный код выглядит так:
n_pred <- 3L
DT[, .(Events = head(rep(Events, 1L + ceiling(n_pred / .N)), .N + n_pred)), by = id_num]
Обратите внимание, что .N — это специальный символ в синтаксисе data.table, содержащий числовые строки в группе.  head() теперь возвращает исходную последовательность плюс предсказанные значения.
Данные
DT <- data.table(
  id_num = c(rep(1L, 5L), 2L, 2L, rep(3L, 4L), 4L, 5L, 5L),
  Events = c(LETTERS[1:5], "B", "E", rep(c("E", "A"), 2L), "C", "F", "G")
)
DT
    id_num Events
 1:      1      A
 2:      1      B
 3:      1      C
 4:      1      D
 5:      1      E
 6:      2      B
 7:      2      E
 8:      3      E
 9:      3      A
10:      3      E
11:      3      A
12:      4      C
13:      5      F
14:      5      G
                        
                            22.07.2017