我在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中那样的稀疏矩阵吗?
取决于你想怎么对付凡是有值的组合的情况下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] 删除。
我来说两句