You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将R中topicmodels包的AssociatedPress DocumentTermMatrix转为数据框?

解决DocumentTermMatrix转词频加权数据框的问题

问题背景

使用R语言topicmodels包的AssociatedPress数据集,其类型为DocumentTermMatrix:

> AssociatedPress
<<DocumentTermMatrix (documents: 2246, terms: 10473)>>
Non-/sparse entries: 302031/23220327
Sparsity           : 99%
Maximal term length: 18
Weighting          : term frequency (tf)

尝试将其转换为词频加权的文档-词频矩阵时,遇到以下问题:

  • 调用tibble::as_data_frame时提示函数已废弃,且无法完成转换
  • 使用base R的as.data.frame直接转换报错

报错信息如下:

> tibble::as_data_frame(AssociatedPress)
Error in as.data.frame.default(value, stringsAsFactors = FALSE) : 
  cannot coerce class ‘c("DocumentTermMatrix", "simple_triplet_matrix")’ to a data.frame
In addition: Warning message:
`as_data_frame()` was deprecated in tibble 2.0.0.
ℹ Please use `as_tibble()` (with slightly different semantics) to convert to a
  tibble, or `as.data.frame()` to convert to a data frame.

> as.data.frame(AssociatedPress)
Error in as.data.frame.default(AssociatedPress) : 
  cannot coerce class ‘c("DocumentTermMatrix", "simple_triplet_matrix")’ to a data.frame

可行转换方法

方法1:通过tm包转矩阵再转数据框

DocumentTermMatrix属于稀疏矩阵,可先用tm包的as.matrix转为普通矩阵,再转换为数据框。注意:原矩阵维度为2246行×10473列,直接转换会占用大量内存,仅适合内存充足的场景。

library(tm)
# 转换为普通矩阵
ap_matrix <- as.matrix(AssociatedPress)
# 转换为数据框,可选添加文档ID列
ap_df <- as.data.frame(ap_matrix)
ap_df <- cbind(document = rownames(ap_matrix), ap_df)

方法2:用tidytext转为tidy格式(推荐)

对于高稀疏度的文本矩阵,tidy长格式更节省内存,也便于后续分析。tidytext的tidy()函数可直接处理DocumentTermMatrix:

library(tidytext)
# 转为tidy长格式,每行对应一个文档-词汇的词频记录
ap_tidy <- tidy(AssociatedPress)

# 如需转换为宽格式的文档-词矩阵,可结合tidyr包的pivot_wider
library(tidyr)
ap_wide <- ap_tidy %>%
  pivot_wider(names_from = term, values_from = count, values_fill = 0)

方法3:利用slam包处理底层稀疏矩阵结构

DocumentTermMatrix继承自simple_triplet_matrix,可使用slam包的函数直接转换:

library(slam)
# 转换为长格式数据框
ap_slam_df <- as.data.frame(as.simple_triplet_matrix(AssociatedPress))

# 如需转宽格式,结合reshape2包的dcast
library(reshape2)
ap_wide_slam <- dcast(ap_slam_df, i ~ j, value.var = "v", fill = 0)
# 重命名列名为词汇,行名为文档ID
colnames(ap_wide_slam)[-1] <- Terms(AssociatedPress)
rownames(ap_wide_slam) <- rownames(AssociatedPress)

内容的提问来源于stack exchange,提问作者user3236841

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 00:04:51