Wie programmgesteuert binäre Spalten basierend auf einer kategorialen Variablen in data.table erstellen?

Ich habe eine große (12 Millionen Zeilen)data.table was so aussieht:

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

Ich möchte ein neues @ erstelldata.table enthält meine Variableid (das wird der eindeutige Schlüssel dieses neuen @ sedata.table) und 5 weitere Binärvariablen, von denen jede einer Kategorie von @ entspricy welche Wert nehmen1 wenn die ID diesen Wert für @ hy, 0 Andernfalls
Die Ausgabedata.table sollte so aussehen:

   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

Ich habe versucht, dies in einer Schleife zu tun, aber es ist ziemlich langsam und ich weiß auch nicht, wie ich die binären Variablennamen programmgesteuert übergeben soll, da sie von der Variablen abhängen, die ich zu "teilen" versuche.

BEARBEITE: wie @mtoto betonte, wurde eine ähnliche Frage bereits gestellt und beantwortetHie, aber die Lösung verwendet dasreshape2 package.
Ich habe mich gefragt, ob es einen anderen (schnelleren) Weg gibt, dies zu tun, indem ich vielleicht das @ benutz:= Operator in data.table, da ich einen riesigen Datensatz habe und ziemlich viel mit diesem Paket arbeite.

EDIT2: Benchmark der Funktionen in @ Aruns Beitrag auf meinen Daten (~ 12 Millionen Zeilen, ~ 3,5 Millionen verschiedene IDs und 490 verschiedene Labels für dasy Variable (ergibt 490 Dummy-Variablen):

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

Antworten auf die Frage(6)

Ihre Antwort auf die Frage