我有一个简单的矩阵,例如
test <- matrix(c("u1","p1","u1","p2","u2","p2","u2",
"p3","u3","p1","u4","p2","u5","p1",
"u5","p3","u6","p3","u7","p4","u7",
"p3","u8","p1","u9","p4"),
ncol=2,byrow=TRUE)
colnames(test) <- c("user","product")
test1<-as.data.frame(test)
Run Code Online (Sandbox Code Playgroud)
测试:
user product
1 u1 p1
2 u1 p2
3 u2 p2
4 u2 p3
5 u3 p1
6 u4 p2
7 u5 p1
8 u5 p3
9 u6 p3
10 u7 p4
11 u7 p3
12 u8 p1
13 u9 p4
Run Code Online (Sandbox Code Playgroud)
我想算一下有多少用户一起购买产品对,比如p1&p2,p2和p3 ......
table(test1$product,test1$product) 给我这个:
p1 p2 p3 p4
p1 4 0 0 0
p2 0 3 0 0
p3 0 0 4 0
p4 0 0 0 2
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到正确的结果:
p1 p2 p3 p4
p1 4 1 1 0
p2 1 3 1 0
p3 1 1 4 1
p4 0 0 1 2
Run Code Online (Sandbox Code Playgroud)
A5C*_*2T1 10
查看所需的输出,您正在寻找crossprod功能:
crossprod(table(test1))
# product
# product p1 p2 p3 p4
# p1 4 1 1 0
# p2 1 3 1 0
# p3 1 1 4 1
# p4 0 0 1 2
Run Code Online (Sandbox Code Playgroud)
这与crossprod(table(test1$user, test1$product))(反映丹尼斯的评论)相同.