R中创建市场篮子矩阵的有效方法

R中创建市场篮子矩阵的有效方法,r,matrix,R,Matrix,我试图根据如下数据创建一个市场篮子矩阵: 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) input重塑2包有一个铸造功能

我试图根据如下数据创建一个市场篮子矩阵:

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)

input重塑2
包有一个铸造功能,可以完成以下工作:

require(reshape2)
m <- acast(input, Customer ~ Product,function(x) 1,fill=0)
m

我希望这就是您想要的?

您可以使用稀疏矩阵:

library(Matrix)
input <- as.data.frame(apply(input,2,as.character))
m <- sparseMatrix( 
  i = as.numeric( input[,1] ),
  j = as.numeric( input[,2] ),
  x = 1,
  dim = c( length(levels(input[,1])), length(levels(input[,2])) ),
  dimnames = list( levels(input[,1]), levels(input[,2]) )
)
m
# 3 x 8 sparse Matrix of class "dgCMatrix"
#         100001 100002 100003 100004 100005 100006 100007 100008
# 1000001      1      1      1      1      1      1      .      .
# 1000002      .      1      1      .      .      .      1      .
# 1000003      .      1      1      .      .      .      .      1
库(矩阵)

输入您不需要为此而真正进行
重塑2
<代码>表格
就是您要找的

m1 <- as.matrix(as.data.frame.matrix(table(input)))

all.equal(m, m1)
TRUE

m1检查您的
输入
矩阵,其中缺少一个值,就在
10000110002
+1之间,我不知道这个值。我正在考虑使用
outer
和一些逻辑比较。尽管如此,@shadow的回答鼓励我立即掌心,或者干脆
unclass(table(input))
。不管怎样,+1,很好的回答我想这个矩阵会占用更少的内存,但是你能将这个矩阵与caret和party这样的软件包结合使用吗?(因为我认为这行不通)你应该试试,但我认为它应该行得通:所有的操作都超载了。但是,可能发生的情况是,这些包使用矩阵来构建其他矩阵——这些矩阵可能是正常(密集)矩阵。如果它不起作用,您可以使用
as.matrix
将稀疏矩阵转换为稠密矩阵。谢谢,我一定会研究它。因为我的矩阵有很多0,它会节省很多内存。如果我有更多的声誉,我会投你的票;)
require(reshape2)
m <- acast(input, Customer ~ Product,function(x) 1,fill=0)
m
        100001 100002 100003 100004 100005 100006 100007 100008
1000001      1      1      1      1      1      1      0      0
1000002      0      1      1      0      0      0      1      0
1000003      0      1      1      0      0      0      0      1
library(Matrix)
input <- as.data.frame(apply(input,2,as.character))
m <- sparseMatrix( 
  i = as.numeric( input[,1] ),
  j = as.numeric( input[,2] ),
  x = 1,
  dim = c( length(levels(input[,1])), length(levels(input[,2])) ),
  dimnames = list( levels(input[,1]), levels(input[,2]) )
)
m
# 3 x 8 sparse Matrix of class "dgCMatrix"
#         100001 100002 100003 100004 100005 100006 100007 100008
# 1000001      1      1      1      1      1      1      .      .
# 1000002      .      1      1      .      .      .      1      .
# 1000003      .      1      1      .      .      .      .      1
m1 <- as.matrix(as.data.frame.matrix(table(input)))

all.equal(m, m1)
TRUE