如何将数据帧强制转换为DocumentTermMatrix?
我试图使用如何将数据帧强制转换为DocumentTermMatrix?,r,topic-modeling,tidytext,R,Topic Modeling,Tidytext,我试图使用tidytext将一组词频转换为DocumentTermMatrix,但该函数似乎没有按预期工作。我从AssociatedPress开始,我知道这是一个documentTermMatrix,整理并将其转换回,但输出与原始矩阵不同。我做错了什么 library(topicmodels) data(AssociatedPress) ap_td <- tidy(AssociatedPress) tt <- ap_td %>% cast_dtm(document, ter
tidytext
将一组词频转换为DocumentTermMatrix,但该函数似乎没有按预期工作。我从AssociatedPress
开始,我知道这是一个documentTermMatrix,整理并将其转换回,但输出与原始矩阵不同。我做错了什么
library(topicmodels)
data(AssociatedPress)
ap_td <- tidy(AssociatedPress)
tt <- ap_td %>%
cast_dtm(document, term, count)
cast\u dtm
检索警告
警告消息:尝试为未找到的变量计算distinct()
在数据中:
-行列
,列
这是一个错误,但出于兼容性原因,只会发出警告。该操作将返回输入
不变
在GitHub上,我找到了现在应该修复的问题。使用tidytext 0.1.9.900和R 3.5.0时,我没有收到您的警告消息 dtm的术语、行和列的数量相同。此外,所有计数都是正确的 实际上,
tt$dimnames$Docs
的$dimnames$Docs与关联的$dimnames$Docs
之间存在差异
原因是,如果在整理之前dtm中没有文档ID,就像AssociatedPress一样,tidy函数会将AssociatedPress$i分配给tidy_文本(ap_td)中的文档变量。将其转换回dtm,将使用tidy_text data.frame(ap_td)中的文档值填充$dimnames$Docs。因此,最终关联的Press$i值将在tt$dimnames$Docs中结束
你可以看到,如果你比较美联社的$i和tt的文档
all.equal(unique(as.character(AssociatedPress$i)), unique(tt$dimnames$Docs))
[1] TRUE
或者从关联的Press到ap\u td再到tt进行比较:
all.equal(unique(as.character(AssociatedPress$i)), unique(tt$dimnames$Docs), unique(ap_td))
[1] TRUE
如果您想自己遵循逻辑,可以检查所使用的所有函数。从tidy.DocumentTermMatrix
开始,然后按照函数调用调用到tidy.simple\u triplet\u matrix
,最后到tidy\u triplet
all.equal(unique(as.character(AssociatedPress$i)), unique(tt$dimnames$Docs), unique(ap_td))
[1] TRUE