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)的条目。

我目前正在使用两个 for 循环单独计算项目,计算矩阵需要很长时间(实际数据大约有一百万行)。

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 组装行/列对,每次出现一对时data(:,1)data(:,2)1。但是请注意,如果您希望矩阵是对称的,则可能需要求和spA及其转置,具体取决于您的数据。

于 2012-10-11T09:52:33.927 回答