我有以下数据框,称为 DF,它是由三个向量组成的数据框:“块”“名称”和“频率”。我需要把它变成一个 NameXName 邻接矩阵,其中当名称位于同一个块中时,它们被认为是相邻的。例如,在第一行中,Gretel 和 Friedrich 是相邻的,因为它们都在 Chunk2 中。并且关系的权重应该基于“频率”,即它们在同一个块中共存的次数,因此对于 Gretel/Friedrich 示例,频率(Gretel)+频率(弗里德里希)-1 = 5
Chunk Name Frequency
1 2 Gretel 2
2 2 Pollock 1
3 2 Adorno 1
4 2 Friedrich 4
5 3 Max 1
6 3 Horkheimer 1
7 3 Adorno 1
8 4 Friedrich 5
9 4 Pollock 1
10 4 March 1
11 5 Comte 3
12 7 Jaspers 1
13 7 Huxley 2
14 8 Nietzsche 1
15 8 Sade 2
16 8 Felix 1
17 8 Weil 1
18 8 Western 1
19 8 Lowenthal 1
20 8 Kant 1
21 8 Hitler 1
我开始通过根据 DF$Chunk 拆分数据框来解决这个问题,
> DF.split<-split(DF, DF$Chunk)
$`2`
Chunk Name Frequency
1 2 Gretel 2
2 2 Pollock 1
3 2 Adorno 1
4 2 Friedrich 4
$`3`
Chunk Name Frequency
5 3 Max 1
6 3 Horkheimer 1
7 3 Adorno 1
$`4`
Chunk Name Frequency
8 4 Friedrich 5
9 4 Pollock 1
10 4 March 1
我认为它更接近了,但它返回了我无法转换回可用数据框的列表项。
我还尝试将其转换为 ChunkXName 邻接矩阵:
> chunkbyname<-tapply(DF$Frequency , list(DF$Name,DF$Chunk) , as.character )
希望将 chunkbyname 与其转置相乘以获得 NAmeXName 矩阵,但似乎这是矩阵太稀疏或太复杂(a %*% b 中的错误:需要数字/复杂矩阵/向量参数)。
非常感谢将此数据框放入邻接矩阵的任何帮助。