通过分配不同的矩阵来计算字符的频率
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 ...
也许你可以尝试 xtabs
或 tapply
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
我有两个矩阵,"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 ...
也许你可以尝试 xtabs
或 tapply
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