我正在寻找一种快速有效的方法来填充共现矩阵(可以这么说)。以下是我正在使用的数据示例:
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)的值应当具有对应于数据集中的(a,e)的3个条目的值3。
我目前正在使用两个for循环单独计算项目,并且计算矩阵需要非常长的时间(实际数据大约有一百万行)。
发布于 2012-10-11 17:52:34
你可以使用sparse来做你需要做的事情:
spA = sparse(data(:,1), data(:,2), 1);其中data是您的数据,但作为数字。因此,您首先必须将字母字符转换为双精度。
Sparse从data(:,1)和data(:,2)组装行/列对,每出现一对就加1。但是请注意,如果您希望矩阵是对称的,则可能需要根据您的数据对spA及其转置求和。
发布于 2012-10-11 17:52:37
这是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 0https://stackoverflow.com/questions/12836531
复制相似问题