从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
...

它基本上包含docs作为行,lemmas作为列,mi是值。也可能没有定义的值。

有什么方法可以从数据中定义像R中那样的稀疏矩阵吗?

ngm

取决于你想怎么对付凡是有值的组合的情况下lemma,并doc没有出现。您提到它们是“未定义的”,并建议在答案中显示“(无值)”。

这是一个更完整的玩具示例:

set.seed(1)
(dfr <- data.frame(lemma = rep(c("foo", "bar", "baz"), each = 2),
           mi = runif(6),
           doc = rep(c("mary", "jane", "mary", "bruce", "dolly", "zizz")),
           stringsAsFactors = FALSE))
#>   lemma        mi   doc
#> 1   foo 0.2655087  mary
#> 2   foo 0.3721239  jane
#> 3   bar 0.5728534  mary
#> 4   bar 0.9082078 bruce
#> 5   baz 0.2016819 dolly
#> 6   baz 0.8983897  zizz

如果0在这种情况下出现数字有意义,则可以使用xtabs以下方法:

xtabs(mi ~ lemma + doc, dfr, sparse = TRUE)

#> 3 x 5 sparse Matrix of class "dgCMatrix"
#>      doc
#> lemma     bruce     dolly      jane      mary      zizz
#>   bar 0.9082078 .         .         0.5728534 .        
#>   baz .         0.2016819 .         .         0.8983897
#>   foo .         .         0.3721239 0.2655087 .

如果您希望从某种意义上讲这些值会丢失,NA那么这是我可以做的最好的事情,请使用tapply

Matrix::Matrix(with(dfr, tapply(mi, list(lemma, doc), sum), sparse = TRUE))

#> 3 x 5 Matrix of class "dgeMatrix"
#>         bruce     dolly      jane      mary      zizz
#> bar 0.9082078        NA        NA 0.5728534        NA
#> baz        NA 0.2016819        NA        NA 0.8983897
#> foo        NA        NA 0.3721239 0.2655087        NA

使用显式地使其成为稀疏矩阵Matrix::Matrix

记住,当他们大,没有太多的非零项稀疏矩阵是有用的,那NA不是0。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章