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"