我正在尝试使用tidytext
将单词频率的变换转换为DocumentTermMatrix,但该函数似乎没有按预期工作。我从AssociatedPress
开始,我知道它是一个documentTermMatrix,整理并将其抛回,但输出与原始矩阵不同。我究竟做错了什么?
library(topicmodels)
data(AssociatedPress)
ap_td <- tidy(AssociatedPress)
tt <- ap_td %>%
cast_dtm(document, term, count)
当我施放$Docs
时,元素ap_td
不是-NULL但在AssociatedPress
中它是NULL:str(tt)
List of 6
$ i : int [1:302031] 1 16 35 72 84 93 101 111 155 161 ...
$ j : int [1:302031] 1 1 1 1 1 1 1 1 1 1 ...
$ v : num [1:302031] 1 1 1 1 1 1 1 1 1 1 ...
$ nrow : int 2246
$ ncol : int 10473
$ dimnames:List of 2
..$ Docs : chr [1:2246] "1" "2" "3" "4" ...
..$ Terms: chr [1:10473] "adding" "adult" "ago" "alcohol" ...
- attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
- attr(*, "weighting")= chr [1:2] "term frequency" "tf"
List of 6
$ i : int [1:302031] 1 1 1 1 1 1 1 1 1 1 ...
$ j : int [1:302031] 116 153 218 272 299 302 447 455 548 597 ...
$ v : num [1:302031] 1 2 1 1 1 1 2 1 1 1 ...
$ nrow : int 2246
$ ncol : int 10473
$ dimnames:List of 2
..$ Docs : NULL
..$ Terms: chr [1:10473] "aaron" "abandon" "abandoned" "abandoning" ...
- attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
- attr(*, "weighting")= chr [1:2] "term frequency" "tf"
cast_dtm
检索警告
警告消息:尝试为数据中找不到的变量计算distinct(): -
row_col
,column_col
这是一个错误,但出于兼容性原因仅引发警告。该操作将返回输入不变。
在GitHub上,我发现this issue应该已经修复了。
我没有使用tidytext 0.1.9.900和R 3.5.0收到您的警告消息。
dtm对于术语,行和列的数量是相同的。所有的计数都是正确的。
差异确实在tt$dimnames$Docs
和AssociatedPress$dimnames$Docs
的$ dimnames $ Docs之间。
这样做的原因是,如果在整理之前dtm中没有docid,就像AssociatedPress那样,整齐的函数将AssociatedPress $ i分配给tidy_text(ap_td)中的文档变量。将其转换回dtm,将使用tidy_text data.frame(ap_td)中的文档值填充$ dimnames $ Docs。因此,最终AssociatedPress $ i值最终会以$ dimnames $ Docs结尾。
您可以看到,如果您将美联社的$ i与来自tt的文档进行比较。
all.equal(unique(as.character(AssociatedPress$i)), unique(tt$dimnames$Docs))
[1] TRUE
或者从AssociatedPress到ap_td到tt的比较:
all.equal(unique(as.character(AssociatedPress$i)), unique(tt$dimnames$Docs), unique(ap_td))
[1] TRUE
如果你想自己遵循逻辑,你可以检查使用on the github page for the sparse_tidiers的所有功能。从tidy.DocumentTermMatrix
开始,按照函数调用tidy.simple_triplet_matrix
,最后到tidy_triplet
。