1

data.frame に読み込むと、次のようなキーワード間の類似性の非常に大きな csv ファイル (約 9,100 万行なので、R では for ループに時間がかかりすぎます) があります。

> df   
kwd1 kwd2 similarity  
a  b  1  
b  a  1  
c  a  2  
a  c  2 

これはスパース リストであり、スパース マトリックスに変換したいと思います。

> myMatrix 
  a b c  
a . 1 2
b 1 . .
c 2 . .

sparseMatrix() を使用してみましたが、キーワード名を整数インデックスに変換するのに時間がかかりすぎます。

助けてくれてありがとう!

4

1 に答える 1

2

acastパッケージからreshape2これをうまく行います。基本的な R ソリューションはありますが、構文はもっと難しいと思います。

library(reshape2)
df <- structure(list(kwd1 = structure(c(1L, 2L, 3L, 1L), .Label = c("a", 
"b", "c"), class = "factor"), kwd2 = structure(c(2L, 1L, 1L, 
3L), .Label = c("a", "b", "c"), class = "factor"), similarity = c(1L, 
1L, 2L, 2L)), .Names = c("kwd1", "kwd2", "similarity"), class = "data.frame", row.names = c(NA, 
-4L))

acast(df, kwd1 ~ kwd2, value.var='similarity', fill=0)

  a b c
a 0 1 2
b 1 0 0
c 2 0 0
> 

パッケージsparseMatrixから使用:Matrix

library(Matrix)
df$kwd1 <- factor(df$kwd1)
df$kwd2 <- factor(df$kwd2)

foo <- sparseMatrix(as.integer(df$kwd1), as.integer(df$kwd2), x=df$similarity)

> foo
3 x 3 sparse Matrix of class "dgCMatrix"


foo <- sparseMatrix(as.integer(df$kwd1), as.integer(df$kwd2), x=df$similarity, dimnames=list(levels(df$kwd1), levels(df$kwd2)))

> foo 

3 x 3 sparse Matrix of class "dgCMatrix"
  a b c
a . 1 2
b 1 . .
c 2 . .
于 2012-09-11T20:01:43.813 に答える