2

私が取り組んでいる入力の例を以下に示します。

User ID 1 --- Artist 5
User ID 2 --- Artist 1
User ID 3 --- Artist 7
User ID 4 --- Artist 2
User ID 5 --- Artist 3
User ID 1 --- Artist 2
User ID 3 --- Artist 1

上記のデータは、アプリのユーザーが聴いた音楽の記録です。

以下の例に対応する隣接行列を生成したいと思います。

           ARTIST 1  ARTIST 2  ARTIST 3  ARTIST 4   ARTIST 5  ARTIST 6  ARTIST 7
USER ID 1     0        1         0          0         1         0         0
USER ID 2     1        0         0          0         0         0         0
USER ID 3     1        0         0          0         0         0         1
USER ID 4     0        1         0          0         0         0         0
USER ID 5     0        0         1          0         0         0         0

これはRでどのように可能になるでしょうか。ヒントや指針をいただければ幸いです。

お時間とご協力いただきありがとうございます。

4

3 に答える 3

3

これは機能します:

# get data in useable form
ContingencyTable <- read.table(text=gsub(pattern = " --- ", replacement = ",","User ID 1 --- Artist 5
User ID 2 --- Artist 1
User ID 3 --- Artist 7
User ID 4 --- Artist 2
User ID 5 --- Artist 3
User ID 1 --- Artist 2
User ID 3 --- Artist 1"),sep=",", stringsAsFactors = FALSE)
# add variable for match value
ContingencyTable$Val <- 1
# more or less lifted from Arun's answer linked by @Hong Ooi, above
adjMat <- reshape2::dcast(ContingencyTable, V1 ~ V2, value.var = "Val", fill=0)
rownames(adjMat) <- adjMat[,1]
adjMat <- adjMat[,2:ncol(adjMat)]

adjMat
        Artist 1 Artist 2 Artist 3 Artist 5 Artist 7
User ID 1        0        1        0        1        0
User ID 2        1        0        0        0        0
User ID 3        1        0        0        0        1
User ID 4        0        1        0        0        0
User ID 5        0        0        1        0        0
于 2013-07-08T11:39:29.320 に答える
2

qdap パッケージには、これadjmatを実行できる機能があります。

dat <- read.table(text=gsub(pattern = " --- ", replacement = ",",
"User ID 1 --- Artist 5
User ID 2 --- Artist 1
User ID 3 --- Artist 7
User ID 4 --- Artist 2
User ID 5 --- Artist 3
User ID 1 --- Artist 2
User ID 3 --- Artist 1"),sep=",", stringsAsFactors = FALSE)


library(qdap)
x <- with(dat, termco(V1, V2, unique(V1)))
adjmat(x)$boolean

## > adjmat(x)$boolean
##           Artist 1 Artist 2 Artist 3 Artist 5 Artist 7
## User ID 1        0        1        0        1        0
## User ID 2        1        0        0        0        0
## User ID 3        1        0        0        0        1
## User ID 4        0        1        0        0        0
## User ID 5        0        0        1        0        0

PS Tim Riffe データを読み込むための優れたアプローチ:)

于 2013-07-08T13:12:56.763 に答える