【发布时间】:2013-07-18 12:16:14
【问题描述】:
我正在尝试从如下所示的数据创建一个购物篮矩阵:
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 x 1500 矩阵),但现在我想在适当的地方填充矩阵:
for( i in 1:nrow(input) ) {
m[ as.character(input[i,1]),as.character(input[i,2])] <- 1
}
我认为必须有一种更有效的方法来做到这一点,正如我从 stackoverflow 中了解到的那样,通常可以避免 for 循环。那么问题来了,有没有更快的方法呢?
我需要矩阵中的数据,因为我想使用像插入符号这样的包。在那之后,我可能会遇到与R memory management advice (caret, model matrices, data frames) 相同的问题,但这是以后的问题。
【问题讨论】:
-
检查你
input矩阵,那里缺少一个值,就在1000001, ,1000002之间