2014-09-11 35 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