2013-12-17 31 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