通过分配不同的矩阵来计算字符的频率

Counting the frequency of characters by assigning different matrix

我有两个矩阵,"main" 和 "label"。

> main
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    0    0    2    0    1    2    1    1    0     1
 [2,]    0    0    1    0    1    2    2    1    2     1
 [3,]    0    0    0    1    2    0    2    0    2     0
 [4,]    0    0    0    0    2    1    0    2    1     0
 [5,]    0    0    0    0    0    2    1    0    1     2
 [6,]    0    0    0    0    0    0    2    0    1     2
 [7,]    0    0    0    0    0    0    0    0    1     1
 [8,]    0    0    0    0    0    0    0    0    0     1
 [9,]    0    0    0    0    0    0    0    0    0     0
[10,]    0    0    0    0    0    0    0    0    0     0

> label
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,] "0"  "0"  "G"  "0"  "C"  "G"  "F"  "E"  "0"  "A"  
 [2,] "0"  "0"  "B"  "0"  "D"  "D"  "F"  "G"  "E"  "D"  
 [3,] "0"  "0"  "0"  "E"  "G"  "0"  "D"  "0"  "A"  "0"  
 [4,] "0"  "0"  "0"  "0"  "A"  "D"  "0"  "F"  "E"  "0"  
 [5,] "0"  "0"  "0"  "0"  "0"  "C"  "H"  "0"  "F"  "G"  
 [6,] "0"  "0"  "0"  "0"  "0"  "0"  "F"  "0"  "B"  "F"  
 [7,] "0"  "0"  "0"  "0"  "0"  "0"  "0"  "0"  "F"  "E"  
 [8,] "0"  "0"  "0"  "0"  "0"  "0"  "0"  "0"  "0"  "D"  
 [9,] "0"  "0"  "0"  "0"  "0"  "0"  "0"  "0"  "0"  "0"  
[10,] "0"  "0"  "0"  "0"  "0"  "0"  "0"  "0"  "0"  "0"  

通过选择"label"矩阵中的每个字符,我想得到该字符在"main"矩阵中的位置总数。例如,如果我给出 "B",输出必须是 2([​​=17=] 矩阵中位于 B 位置的数字之和)或者给出 "A",我们必须得到 5 . 这意味着我们将有一个不同种类标签的列表,以及每个标签在主矩阵中的频率。 喜欢:

A  B  ...
5  2  ...

也许你可以尝试 xtabstapply

res <- xtabs(data.frame(c(main),c(label)))

res <- tapply(main,label,sum)

例子

set.seed(1)
main <- matrix(sample(0:2,25,replace = TRUE),nrow = 5)
label <- matrix(sample(c("0",LETTERS[1:3]),25,replace = TRUE),nrow = 5)

res <- xtabs(data.frame(c(main),c(label)))

这样

> res
c.label.
0 A B C 
6 7 2 6 

如果 data.frame 是结果的预期格式,那么 aggregate

怎么样
aggregate(main ~ label ,data.frame(main = c(main),label = c(label)),sum)

使用Matrix.utils包:

library(Matrix.utils)

aggregate.Matrix(c(main), c(label), fun = "sum")

:

4 x 1 sparse Matrix of class "dgCMatrix"

0 6
A 7
B 2
C 6