Manera eficiente de crear matriz de cesta de mercado en R

Estoy tratando de crear una matriz de canasta de mercado a partir de datos que se parecen a los siguientes:

input <- matrix( c(1000001,1000001,1000001,1000001,1000001,1000001,1000002,1000002,1000002,1000003,1000003,1000003,100001,100002,100003,100004,100005,100006,100002,100003,100007,100002,100003,100008), ncol=2)

Esto representa los datos siguientes:

colnames(input) <- c( "Customer" , "Product" )

A partir de esto se crea una matriz que tiene un cliente como una fila y todos los productos como columnas. Esto se puede lograr creando primero esta matriz con cero:

input <- as.data.frame(input)
m <- matrix(0, length(unique(input$Customer)), length(unique(input$Product)))
rownames(m) <- unique(input$Customer)
colnames(m) <- unique(input$Product)

Todo esto es lo suficientemente rápido (tiene datos de más de 750 000 filas, creando una matriz de 15000 por 1500), pero ahora quiero rellenar la matriz cuando sea apropiado:

for( i in 1:nrow(input) ) {
    m[ as.character(input[i,1]),as.character(input[i,2])] <- 1
}

Creo que tiene que haber una forma más eficiente de hacer esto, ya que aprendí de stackoverflow que a menudo se pueden evitar los bucles. Entonces la pregunta es, ¿hay una manera más rápida?

Y necesito los datos en una matriz porque me gustaría usar paquetes como caret. Y después de eso probablemente me encontraré con el mismo problema que aquíAsesoramiento en gestión de memoria R (caret, modelo de matrices, marcos de datos), pero eso es una preocupación para más adelante.

Respuestas a la pregunta(3)

Su respuesta a la pregunta