Maneira eficiente de criar matriz de cesta de mercado em R
Eu estou tentando criar uma matriz de cesta de mercado de dados que se parece com o seguinte:
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)
Isto representa os seguintes dados:
colnames(input) <- c( "Customer" , "Product" )
A partir disso, é criada uma matriz que tem um cliente como uma linha e todos os produtos como colunas. Isto pode ser conseguido criando primeiro esta matriz com zero:
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)
Isso tudo é rápido o suficiente (tem dados de mais de 750.000 linhas, criando uma matriz de 15000 por 1500), mas agora eu quero preencher a matriz quando apropriado:
for( i in 1:nrow(input) ) {
m[ as.character(input[i,1]),as.character(input[i,2])] <- 1
}
Eu acho que tem que haver uma maneira mais eficiente de fazer isso, já que eu aprendi com o stackoverflow que para loops muitas vezes podem ser evitados. Então a questão é, existe um caminho mais rápido?
E eu preciso dos dados em uma matriz porque eu gostaria de usar pacotes como o caret. E depois disso eu provavelmente vou estar correndo para o mesmo problema que aquiR conselho de gerenciamento de memória (circunflexo, matrizes de modelo, quadros de dados), mas isso é uma preocupação para mais tarde.