Эффективный способ создать матрицу рыночной корзины в R
Я пытаюсь создать матрицу рыночной корзины из данных, которые выглядят следующим образом:
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)
Это представляет следующие данные:
colnames(input) <- c( "Customer" , "Product" )
Из этого создается матрица, в которой клиент представлен в виде строки, а все продукты - в виде столбцов. Это может быть достигнуто путем создания этой матрицы с нулями:
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)
Это все достаточно быстро (есть данные из 750 000+ строк, создающих матрицу 15000 на 1500), но теперь я хочу заполнить матрицу, где это уместно:
for( i in 1:nrow(input) ) {
m[ as.character(input[i,1]),as.character(input[i,2])] <- 1
}
Я думаю, что должен быть более эффективный способ сделать это, поскольку я узнал из stackoverflow, что для циклов часто можно избежать. Вопрос в том, есть ли более быстрый путь?
И мне нужны данные в матрице, потому что я хотел бы использовать такие пакеты, как Caret. И после этого я, вероятно, столкнусь с той же проблемой, что и здесьРекомендации по управлению памятью (каретка, матрицы моделей, кадры данных), но это беспокойство на потом.