2

次のデータフレーム「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、2 番目の列は顧客が購入したアイテムの ID、3 番目の列は購入したアイテムの数です。8 行と 8 列の正方行列である共起行列を作成しようとしています。8 は個別の項目の数です。

n = length(unique(x$cid))

これは、SAC パラダイムを通じて行うことができますか? すべての ID について、組み合わせごとに +1 を追加して上記のマトリックスを更新する必要があります。たとえば、アイテム c1、c2、c3、c4、c6 を持つユーザー 'b' の場合、列 2、3、4、および 6 のマトリックスの最初の行は、すべてのユーザーに対して 1 ずつ増加する必要があります。このフレームワークにキャストできません。どんな助けでも大歓迎です。

4

2 に答える 2

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

アイテムが購入された回数 (ボリューム) も考慮する必要がある場合は、これをこのコードに簡単に追加できます。

于 2012-05-13T02:34:12.087 に答える
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は、より便利な場合はデータフレームを生成します。

于 2012-05-13T02:40:25.067 に答える