首页 > 解决方案 > 通过分配不同的矩阵来计算字符的频率

问题描述

我有两个矩阵,“主”和“标签”。

> 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"  

通过选择“标签”矩阵中的每个字符,我想获得该字符在“主”矩阵中的位置总数。例如,如果我给“B”,则输出必须为 2(“主”矩阵中位于 B 位置的数字的总和)或通过给“A”,我们必须得到 5。这意味着我们将有不同种类标签的列表,其中每个标签在主矩阵中的频率。像:

A  B  ...
5  2  ...

标签: rmatrixcharacter

解决方案


也许你可以尝试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 

推荐阅读