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