【问题标题】:How to quickly apply over Document Term Matrix in R如何在 R 中快速应用文档术语矩阵
【发布时间】:2018-11-15 02:59:04
【问题描述】:

我正在开展一个项目,该项目需要我迭代文档术语矩阵,将所有非零值转换为 1 并将零值保持为零。我现在使用的函数需要永远运行,我想帮助优化代码。

我现在的代码是

convert_counts <- function(x) {
                    x <- ifelse(x > 0, 1, 0)
                    x <- factor(x, levels = c(0, 1), 
                    labels = c("No", "Yes"))}

data_exp <- apply(data_dtm, 2, convert_counts)

data_dtm 是一个大型文档术语矩阵。

【问题讨论】:

标签: r text-mining


【解决方案1】:

您拥有的函数将稀疏矩阵转换为完整字符矩阵。如果您有一个大的文档术语矩阵,这将导致运行时间长并且很有可能出现内存错误。如果您利用矩阵的构建方式,可以快速替换稀疏矩阵中的值。稀疏矩阵值存储在矩阵的v(值)部分。见?slam::simple_triplet_matrix

在稀疏矩阵上使用任何 apply 系列,而不使用设计用于处理稀疏矩阵的函数会将其转换为正常(密集)矩阵。相应地,运行时间长和内存问题。

要更改您的情况下所有不同于 0 的值,只需使用以下命令:

data_dtm$v[data_dtm$v &gt; 0] &lt;- 1 inspect(data_dtm) # show first 10 columns and rows

这会将所有值替换为 1,并将数据保留为文档术语矩阵(又名 nice 和 sparse)。

根据您的后续数据分析,您确实应该使用稀疏矩阵函数。如果要将大型文档术语矩阵转换为 data.frame 或 data.table,则很有可能内存不足。

对于任何后续问题,请提供可重现的示例和预期输出。

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 2018-11-26
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    相关资源
    最近更新 更多