从双列创建一个术语频矩阵出现矩阵
问题描述:
我有话和文档中出现的输入选项卡表:从双列创建一个术语频矩阵出现矩阵
# 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
我做错了什么? 如何根据要求获得我的矩阵行名?
答
我相信你正在使用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
答
使用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
我觉得你忘记了一些重要的信息 – 2014-10-16 23:27:40