2

共起行列を作成するための高速で効率的な方法を探しています(つまり)。これが私が扱っているデータのサンプルです:

col1 col2
a e    
a f    
a e    
b f    
c g    
a e    
d f    
a e    
a g    
b e    
c e

そして、次の形式の行列が必要です。

... e...  f...  g    
a    
b    
c    
d

頻度に関連する対応するエントリを使用します。

たとえば、行列の要素 (3,1) は (c,e) の共起の頻度に対応し、値 1 を持ち、(1,1) の要素は 3 に対応する値 3 を持つ必要があります。データセット内の (a,e) のエントリ。

現在、2 つの for ループを使用して項目を個別に計算していますが、行列の計算に非常に長い時間がかかります (実際のデータには約 100 万行あります)。

4

2 に答える 2

3

これはRのソリューションですtable

df <- read.table(text="col1 col2
a e    
a f    
a e    
b f    
c g    
a e    
d f    
a e    
a g    
b e    
c e", header = TRUE)

table(df)

    col2
col1 e f g
   a 4 1 1
   b 1 1 0
   c 1 0 1
   d 0 1 0
于 2012-10-11T09:52:36.607 に答える
1

sparse必要なことを正確に行うために使用できます。

spA = sparse(data(:,1), data(:,2), 1);

あなたのデータはどこにdataありますが、数字として。したがって、最初に英字を倍精度浮動小数点数に変換する必要があります。

Sparseは、行と列のペアをアセンブルし、ペアが発生するたびに1を加算しますdata(:,1)data(:,2)ただし、行列が対称であると予想される場合はspA、データによっては、合計とその転置が必要になる場合があることに注意してください。

于 2012-10-11T09:52:33.927 に答える