2014-10-16 203 views
1

我有話和文檔中出現的輸入選項卡表:從雙列創建一個術語頻矩陣出現矩陣

#  WORDS   DOCUMENTS 
1 chr1-1-5872   A_1 
2 chr1-5873-14436  A_2 
3 chr1-14437-17846  A_3 
4 chr1-17847-20294  A_2 
5 chr1-20295-22639  A_5 

而且我希望得到一個頻率矩陣,在我所有的字作爲行,所有的文件名作爲列,每個條目是這個詞找到了與此文檔相關聯的次數:

#      A_1 A_2 A_3 A_4 A_5 
1 chr1-1-5872   1  1 0  0  0 
2 chr1-5873-14436  0  0 0  0  0 
3 chr1-14437-17846  0  0 1  0  0 
4 chr1-17847-20294  0  1 0  0  0 
5 chr1-20295-22639  0  0 0  0  0 

我用下面的命令嘗試:

result <- t(with(tab, wfm(tab$WODS, tab$DOCUMENTS))) 

但所有我得到的是

   A_1 A_2 A_3 A_5 
grouping.var 1 2 1 1 

我做錯了什麼? 如何根據要求獲得我的矩陣行名?

+1

我覺得你忘記了一些重要的信息 – 2014-10-16 23:27:40

回答

2

我相信你正在使用qdap包。如果你的文本看起來像這樣(即每一行實際上是一個單詞),那麼wfm是矯枉過正,你需要改變一堆參數以避免數據的剝離。你對重塑數據更感興趣。這裏有一個辦法:

library(qdap) 
as.wfm(with(tab, mtabulate(setNames(DOCUMENTS, WORDS)))) 

##     A_1 A_2 A_3 A_5 
## chr1-1-5872  1 0 0 0 
## chr1-5873-14436 0 1 0 0 
## chr1-14437-17846 0 0 1 0 
## chr1-17847-20294 0 1 0 0 
## chr1-20295-22639 0 0 0 1 
4

使用table功能:

table(df) 
#     DOCUMENTS 
# WORDS    A_1 A_2 A_3 A_5 
# chr1-1-5872  1 0 0 0 
# chr1-14437-17846 0 0 1 0 
# chr1-17847-20294 0 1 0 0 
# chr1-20295-22639 0 0 0 1 
# chr1-5873-14436 0 1 0 0 

我們還可以添加as.data.frame.matrix有它data.frame類:

as.data.frame.matrix(table(df)) 
#     A_1 A_2 A_3 A_5 
# chr1-1-5872  1 0 0 0 
# chr1-14437-17846 0 0 1 0 
# chr1-17847-20294 0 1 0 0 
# chr1-20295-22639 0 0 0 1 
# chr1-5873-14436 0 1 0 0 

或者使用dcast(只是一般知識功能):

library(reshape2) 
dcast(df, WORDS ~ DOCUMENTS, length) 
#    WORDS A_1 A_2 A_3 A_5 
# 1  chr1-1-5872 1 0 0 0 
# 2 chr1-14437-17846 0 0 1 0 
# 3 chr1-17847-20294 0 1 0 0 
# 4 chr1-20295-22639 0 0 0 1 
# 5 chr1-5873-14436 0 1 0 0