2013-12-17 30 views
1

我有以下数据帧称为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 $块的数据帧在这个破解,

> 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) 

与它的转置,以获得NAmeXName矩阵相乘chunkbyname的希望,但似乎这是矩阵太稀疏或复杂(%*%b中的错误:需要数值/复数矩阵/向量参数)。

任何帮助获取此数据帧到邻接矩阵非常赞赏。

回答

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 
+0

是的。非常感谢! – Mon

+0

很高兴它以你想要的方式工作! – Henrik