Como criar programaticamente colunas binárias com base em uma variável categórica em data.table?
Eu tenho um grande (12 milhões de linhas)data.table
que fica assim:
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
Eu quero criar um novodata.table
contendo minha variávelid
(que será a chave exclusiva deste novodata.table
) e 5 outras variáveis binárias, cada uma correspondendo a cada categoria dey
que levam valor1
se o ID tiver esse valor paray
, 0
de outra forma.
A saídadata.table
deve ficar assim:
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
Tentei fazer isso em um loop, mas é muito lento e também não sei como passar os nomes de variáveis binárias programaticamente, pois eles dependem da variável que estou tentando "dividir".
EDITAR: como @mtoto apontou, uma pergunta semelhante já foi feita e respondidaaqui, mas a solução está usando oreshape2
pacote.
Fiquei me perguntando se há outra maneira (mais rápida) de fazer isso, talvez usando o:=
operador no data.table, como tenho um conjunto de dados massivo e estou trabalhando bastante com este pacote.
EDIT2: referência das funções na postagem do @ Arun nos meus dados (~ 12 milhões de linhas, ~ 3,5 milhões de IDs diferentes e 490 rótulos diferentes para oy
variável (resultando em 490 variáveis fictícias)):
system.time(ans1 <- AnsFunction()) # 194s
system.time(ans2 <- dcastFunction()) # 55s
system.time(ans3 <- TableFunction()) # Takes forever and blocked my PC