使用SAC共生矩阵?(Co-occurrence matrix using SAC?)

2019-06-24 09:35发布

我有以下的数据帧“X”

id,item,volume
a,c1,2
a,c2,3
a,c3,2
a,c4,1
a,c5,4
b,c6,6
b,c1,2
b,c3,1
b,c2,6
b,c4,4
c,c2,5
c,c8,6
c,c9,2
d,c1,1
e,c3,7
e,c2,3
e,c1,2
e,c9,5
e,c4,1
f,c1,7
f,c3,1

第一列是客户的ID,第二列是一个项目的客户买了id和第三列是买了这些项目的数量。 我试图创建一个共生矩阵是8行和列,8是不同的项目数的方阵。

n = length(unique(x$cid))

难道这通过SAC范式做什么? 对于每一个ID,我需要通过添加+1每一个组合来更新上述矩阵。 例如,对于用户“B”的项目C1,C2,C3,C4,C6,所述第一行中的矩阵的列2,3,4和6应由1为所有用户被递增等等。 我无法将它转换到这个框架中。 任何帮助非常赞赏。

Answer 1:

作为@joran提到的那种不清楚你真正想要的。 但是,如果我理解正确的话(可能不是),我想提出一个备用路由。 我想你想的内容与代表的次数数项的矩阵中的项目共享客户?

如果是的话:

library(igraph)
library(tnet)
id_item<-cbind(
i=c(1,1,2,2,2,2,2,3,4,5,5,5,6,6,7,8),  #items
p=c(1,2,1,2,3,4,5,2,3,4,5,6,6,7,8,8))  #customers
item_item<-projecting_tm(id_item, method="sum")
item_item <- tnet_igraph(item_item,type="weighted one-mode tnet")
itemmat<-get.adjacency(item_item,attr="weight")
itemmat  #8x8 martrix of items to items

#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
#[1,]    0    2    1    0    0    0    0    0
#[2,]    2    0    1    1    2    0    0    0
#[3,]    1    1    0    0    0    0    0    0
#[4,]    0    1    0    0    0    0    0    0
#[5,]    0    2    0    0    0    1    0    0
#[6,]    0    0    0    0    1    0    0    0
#[7,]    0    0    0    0    0    0    0    1
#[8,]    0    0    0    0    0    0    1    0

如果你需要的时候该项目是买(体积)考虑人数太多,然后这是很容易加入到这种代码。



Answer 2:

rehsape2提供“acast”,这可能是你想要什么:

> acast(x, id~item,value.var='volume')
  c1 c2 c3 c4 c5 c6 c8 c9
a  2  3  2  1  4 NA NA NA
b  2  6  1  4 NA  6 NA NA
c NA  5 NA NA NA NA  6  2
d  1 NA NA NA NA NA NA NA
e  2  3  7  1 NA NA NA  5
f  7 NA  1 NA NA NA NA NA

reshape2 :: dcast产生一个数据帧,如果这是更方便的。



文章来源: Co-occurrence matrix using SAC?
标签: r plyr