【问题标题】:Subsetting a DocuementTermMatrix对DocuementTermMatrix 进行子集化
【发布时间】:2026-02-01 00:30:02
【问题描述】:

我创建了一个看起来像这样的 TermDocumentMatrix:

>inspect(tdm[1:6,1:3])   
Terms       Doc1.txt   Doc2.txt    Doc3.txt
abcd          1           0          0
abandon       0           1          1
qrd           0           0          1
abductor      1           0          0 
plo           1           1          0
man           0           1          0 

我还有一个单词列表,例如:

>dict
abductor
abandon
man
mammoth

现在我如何子集 TermDocumentMatrix 行使其看起来像

Terms       Doc1.txt   Doc2.txt    Doc3.txt
abandon       0           1          1
abductor      1           0          0 

我只能使用“dict”列表检查矩阵中的行名,但我无法对它们进行子集化

【问题讨论】:

    标签: r tm


    【解决方案1】:

    您可以使用单词向量进行子集化。您没有包含reproducible example,所以我将使用?TermDocumentMatrix 帮助页面中的那个。

    library(tm)
    data("crude")
    tdm <- TermDocumentMatrix(crude,
        control = list(removePunctuation = TRUE,
        stopwords = TRUE))
    
    words<-c("world","zero")
    inspect(tdm[words, 1:3])
    
    # <<TermDocumentMatrix (terms: 2, documents: 3)>>
    # Non-/sparse entries: 1/5
    # Sparsity           : 83%
    # Maximal term length: 5
    # Weighting          : term frequency (tf)
    # 
    #        Docs
    # Terms   127 144 191
    #   world   0   1   0
    #   zero    0   0   0
    

    如果不知道矩阵中出现了哪些单词,可以使用

    words <- c("world","zero", "xyyzy")
    inspect(tdm[words[words %in% Terms(tdm)], 1:3])
    

    【讨论】:

    • 如果我在你的代码 sn-p 中尝试 words[.simple_triplet_matrix(tdm, words, 1: 3) : 下标越界。我想用给定的列表检查数据框行中的单词
    • 你的问题不是很清楚。我已将答案更新为仅将单词列表子集为矩阵中的那些单词。
    • 道歉,但修改后的答案效果很好,谢谢
    最近更新 更多