我正在寻找一种快速有效的方法来填充共生矩阵(以便说)。 以下是我正在使用的数据示例:
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循环单独计算项目,并且计算矩阵需要很长时间(实际数据有大约一百万行)。
答案 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
及其转置进行求和,具体取决于您的数据。