Converter dados de linha em colunas binárias

Eu estou tentando formatar uma coluna de dados em muitas colunas binárias para eventualmente usar para mineração de regra de associação. Eu tive algum sucesso usando um loop for e uma matriz triplet simples, mas não tenho certeza de como agregar os níveis na primeira coluna depois - semelhante a umgrupo por instrução em SQL. Eu forneci um exemplo abaixo, embora com um conjunto de dados muito menor - se for bem-sucedido, meu conjunto de dados reais será de 4.200 linhas por 3.902 colunas, portanto, qualquer solução precisa ser escalonável. Quaisquer sugestões ou abordagens alternativas seriam muito apreciadas!

> data <- data.frame(a=c('sally','george','andy','sue','sue','sally','george'), b=c('green','yellow','green','yellow','purple','brown','purple'))
> data
       a      b
1  sally  green
2 george yellow
3   andy  green
4    sue yellow
5    sue purple
6  sally  brown
7 george purple

x <- data[,1]
for(i in as.numeric(2:ncol(data))) 
 x <- cbind(x, simple_triplet_matrix(i=1:nrow(data), j=as.numeric(data[,i]),
              v = rep(1,nrow(data)), dimnames = list(NULL, levels(data[,i]))) )

##Looks like this:

> as.matrix(x)

     name    brown green purple yellow
[1,] "sally"  "0"    "1"   "0"     "0"    
[2,] "george" "0"    "0"   "0"     "1"   
[3,] "andy"   "0"    "1"   "0"     "0"    
[4,] "sue"    "0"    "0"   "0"     "1"   
[5,] "sue"    "0"    "0"   "1"     "0"    
[6,] "sally"  "1"    "0"   "0"     "0" ##Need to aggregate by Name

##Would like it to look like this:
     name    brown green purple yellow
[1,] "sally"  "1"   "1"   "0"    "0"    
[2,] "george" "0"   "0"   "0"    "1"   
[3,] "andy"   "0"   "1"   "0"    "0"    
[4,] "sue"    "0"   "0"   "1"    "1"   

questionAnswers(1)

yourAnswerToTheQuestion