我有以下数据框'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列的方阵,8是不同项的数量。
n = length(unique(x$cid))
这可以通过SAC范例来完成吗?对于每个id,我需要通过为每个组合添加+1来更新上述矩阵。例如,对于具有项目c1,c2,c3,c4,c6的用户'b',列2,3,4&中的第一行。对于所有用户,6应该增加1,依此类推。我无法将其投入此框架。任何帮助非常感谢。
答案 0 :(得分:2)
@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
如果你需要考虑购买物品(体积)的次数,那么很容易将其添加到此代码中。
答案 1 :(得分:1)
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会生成一个数据框,如果更方便的话。