我有以下数据框,称之为DF,这是一个由三个向量组成的数据框:“Chunk”“Name”和“Frequency”。我需要把它变成一个NameXName邻接矩阵,当Names位于同一个chunk中时,它们被认为是相邻的。例如,在第一行中,Gretel和Friedrich是相邻的,因为它们都在Chunk2中。并且关系的权重应该基于“频率”,恰好是它们在同一块中共存的次数,因此对于Gretel / Friedrich示例,频率(Gretel)+频率(Friedrich)-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矩阵,但似乎这是矩阵太稀疏或复杂(%*%b中的错误:需要数字/复杂矩阵/向量参数)。 / p>
任何帮助将此数据框纳入邻接矩阵的帮助都非常受欢迎。
答案 0 :(得分:3)
这是你在找什么?
df3 <- by(df, df$Chunk, function(x){
mm <- outer(x$Frequency, x$Frequency, "+") - 1
rownames(mm) <- x$Name
colnames(mm) <- x$Name
mm
})
df3
# $`2`
# Gretel Pollock Adorno Friedrich
# Gretel 3 2 2 5
# Pollock 2 1 1 4
# Adorno 2 1 1 4
# Friedrich 5 4 4 7
#
# $`3`
# Max Horkheimer Adorno
# Max 1 1 1
# Horkheimer 1 1 1
# Adorno 1 1 1
#
# $`4`
# Friedrich Pollock March
# Friedrich 9 5 5
# Pollock 5 1 1
# March 5 1 1