2014-09-11 73 views
2

我有個術語的文檔稀疏矩陣由R中iusing的TM包轉換一個術語的文檔矩陣到節點/邊列表中的R

我可以轉換到使用此代碼段的一個術語,術語基質:

library("tm") 
data(crude) 
couple.of.words <- c("embargo", "energy", "oil", "environment", "estimate") 
tdm <- TermDocumentMatrix(crude, control = list(dictionary = couple.of.words))  
tdm.matrix <- as.matrix(tdm) 
tdm.matrix[tdm.matrix>=1] <- 1 
tdm.matrix <- tdm.matrix %*% t(tdm.matrix) 

但它不是我真正需要的,因爲我必須建立適合像Gephi網絡分析工具要加載的數據幀。這個數據幀應理想地具有三列:

{字詞1,TERM2,其中TERM1和TERM2共同出現的文檔數}

例如(而不是從在上面的例子中提供的實際數據),如果字「禁運」和「節能」共同出現在三個文件(這可以在TDM矩陣,其中每個文檔適合一列可以看出),我有一排這樣的:

+-----------+-------------+------+ 
| term1  | term 2  | Freq | 
+-----------+-------------+------+ 
| oil  | energy  | 3 | 
+-----------+-------------+------+ 

我怎麼能建立這個來自術語文檔或術語術語矩陣的節點/邊緣數據框?

+0

請提供一個最小的[reproducible example](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),所以我們可以看到的類和結構的涉及的對象。如果您提供樣本數據,還可以給出期望的輸出,以便我們可以測試各種策略。 – MrFlick 2014-09-11 13:03:59

+0

增加了一些示例代碼,並對期望的輸出 – 2014-09-11 13:52:42

回答

2

聽起來你可以得到你所需要的,如果你添加的代碼

desired <- as.data.frame(as.table(tdm.matrix)) 
head(desired) 

#   Terms Terms.1 Freq 
# 1  embargo embargo 8 
# 2  energy embargo 6 
# 3 environment embargo 2 
# 4 estimate embargo 4 
# 5   oil embargo 44 
# 6  embargo energy 6 

as.table()真的只是改變了一個類的多個線路。而且恰巧有一種現有的as.data.frame.table()方法可以將表格按照您的願望平鋪爲頻率列表。

+0

進行了一些強調,它可以很好地工作;我只是想知道是否有一種簡單的方法來擺脫排列,即。上例中的第二行和第六行:實際上它是相同的關係,但是相反。認爲這將有助於但不確定:http://stackoverflow.com/questions/14078507/remove-duplicated-2-columns-permutations – 2014-09-12 09:41:52