Как программно создать двоичные столбцы на основе категориальной переменной в data.table?

У меня большой (12 миллионов строк)data.table который выглядит так:

library(data.table)
set.seed(123)
dt <- data.table(id=rep(1:3, each=5),y=sample(letters[1:5],15,replace = T))
> dt
    id y
 1:  1 b
 2:  1 d
 3:  1 c
 4:  1 e
 5:  1 e
 6:  2 a
 7:  2 c
 8:  2 e
 9:  2 c
10:  2 c
11:  3 e
12:  3 c
13:  3 d
14:  3 c
15:  3 a

Я хочу создать новыйdata.table содержащий мою переменнуюid (который будет уникальным ключом этого новогоdata.table) и 5 ​​других двоичных переменных, каждая из которых соответствует каждой категорииy которые ценят1 если идентификатор имеет это значение дляy, 0 иначе.
Выходdata.table должен выглядеть так:

   id a b c d e
1:  1 0 1 1 1 1
2:  2 1 0 1 0 1
3:  3 1 0 1 1 1

Я попытался сделать это в цикле, но это довольно медленно, и я также не знаю, как передать двоичные имена переменных программно, так как они зависят от переменной, которую я пытаюсь «разделить».

РЕДАКТИРОВАТЬ: как отметил @mtoto, на подобный вопрос уже задавали и отвечалиВот, но решение используетreshape2 пакет.
Мне было интересно, есть ли другой (более быстрый) способ сделать это, возможно, используя:= оператор в data.table, так как у меня огромный массив данных, и я довольно много работаю с этим пакетом.

EDIT2: бенчмарк функций в посте @ Аруна по моим данным (~ 12 миллионов строк, ~ 3,5 миллиона различных идентификаторов и 490 различных меток дляy переменная (в результате получается 490 фиктивных переменных)):

system.time(ans1 <- AnsFunction())   # 194s
system.time(ans2 <- dcastFunction()) # 55s
system.time(ans3 <- TableFunction()) # Takes forever and blocked my PC

Ответы на вопрос(3)

Ваш ответ на вопрос