¿Cómo crear mediante programación columnas binarias basadas en una variable categórica en data.table?
Tengo un gran (12 millones de filas)data.table
que se ve así:
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
Quiero crear un nuevodata.table
que contiene mi variableid
(que será la clave única de este nuevodata.table
) y otras 5 variables binarias, cada una correspondiente a cada categoría dey
que toman valor1
si la identificación tiene ese valor paray
, 0
de otra manera.
La salidadata.table
debería verse así:
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
Intenté hacer esto en un bucle, pero es bastante lento y tampoco sé cómo pasar los nombres de variables binarias mediante programación, ya que dependen de la variable que estoy tratando de "dividir".
EDITAR: como señaló @mtoto, ya se ha hecho y respondido una pregunta similaraquí, pero la solución es usar elreshape2
paquete.
Me preguntaba si hay otra forma (más rápida) de hacerlo tal vez usando el:=
operador en data.table, ya que tengo un conjunto de datos masivo y estoy trabajando bastante con este paquete.
EDIT2: punto de referencia de las funciones en la publicación de @ Arun en mis datos (~ 12 millones de filas, ~ 3,5 millones de identificadores diferentes y 490 etiquetas diferentes para ely
variable (que resulta en 490 variables ficticias)):
system.time(ans1 <- AnsFunction()) # 194s
system.time(ans2 <- dcastFunction()) # 55s
system.time(ans3 <- TableFunction()) # Takes forever and blocked my PC