填充共生矩阵

时间:2012-10-11 09:35:46

标签: r matlab

我正在寻找一种快速有效的方法来填充共生矩阵(以便说)。 以下是我正在使用的数据示例:

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对应于数据集中的(a,e)的3个条目。

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

2 个答案:

答案 0 :(得分:2)

这是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

答案 1 :(得分:1)

您可以使用sparse完全按照您的要求执行操作:

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

其中data是您的数据,但是作为数字。所以你首先必须将字母字符转换成双字符。

Sparse组装来自data(:,1)data(:,2)的行/列对,为每对出现添加1。但请注意,如果您希望矩阵是对称的,则可能需要对spA及其转置进行求和,具体取决于您的数据。