Convertir datos de fila en columnas binarias

Estoy intentando formatear una columna de datos en muchas columnas binarias para usarlas finalmente en la minería de reglas de asociación. He tenido cierto éxito al usar un bucle for y una simple matriz de tripletes, pero no estoy seguro de cómo agregar los niveles en la primera columna posterior, similar a unagrupar por Declaración en SQL. He proporcionado un ejemplo a continuación, aunque con un conjunto de datos mucho más pequeño: si tengo éxito, mi conjunto de datos real será de 4.200 filas por 3.902 columnas, por lo que cualquier solución debe ser escalable. Cualquier sugerencia o enfoque alternativo sería muy apreciado!

> 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"