首页 > 解决方案 > 从 R 中的条目行创建一个稀疏矩阵

问题描述

我在 R 中有一个如下形式的数据框:

                     lemma       mi                                 doc
1        butroe_polihalino 5.385031 ANEJO_05_Q ECOL_Cantabrico Oriental
2        tramo_oligohalino 5.385031 ANEJO_05_Q ECOL_Cantabrico Oriental
3 programas_de_seguimiento 5.385031 ANEJO_05_Q ECOL_Cantabrico Oriental
4                     ifim 5.385031 ANEJO_05_Q ECOL_Cantabrico Oriental
5                      rdl 5.385031 ANEJO_05_Q ECOL_Cantabrico Oriental
6                 prointec 5.385031 ANEJO_05_Q ECOL_Cantabrico Oriental

我想创建一个稀疏矩阵(我将在其中运行 PCA),其形式为:

                butroe_polihalino tramo_oligohalino ...
ANEJO_05_...    5.385031          5.385031
docs2           (no value)        4.321345
...

其中基本上包含文档作为行,引理作为列,mi 是值。也可能没有定义的值。

有没有办法从数据中定义一个像 R 一样的稀疏矩阵?

标签: rdataframematrix

解决方案


您可以sparseMatrix从基础matrix包中使用。(假设您的 data.frame 中没有因子。)

m <- Matrix::sparseMatrix(i = match(df$doc, unique(df$doc)), 
                          j = match(df$lemma, unique(df$lemma)), 
                          x = df$mi,
                          dimnames = list(unique(df$doc), unique(df$lemma)))

caste_sparsetidytext. 这减少了输入,并且该功能会检查您的数据是否有因素。

m <- tidytext::cast_sparse(df, row = doc, column = lemma, value = mi)

数据:

df <- structure(list(lemma = c("butroe_polihalino", "tramo_oligohalino", "programas_de_seguimiento", 
                               "ifim", "rdl", "prointec"), 
                     mi = c(5.385031,5.385031, 5.385031, 5.385031, 5.385031, 5.385031), 
                     doc = c("ANEJO_05_Q ECOL_Cantabrico Oriental","ANEJO_05_Q ECOL_Cantabrico Oriental", 
                             "ANEJO_05_Q ECOL_Cantabrico Oriental", "ANEJO_05_Q ECOL_Cantabrico Oriental", 
                             "ANEJO_05_Q ECOL_Cantabrico Oriental", "ANEJO_05_Q ECOL_Cantabrico Oriental")), 
                .Names = c("lemma", "mi", "doc"), 
                class = "data.frame", 
                row.names = c(NA, -6L))

推荐阅读