首页 > 解决方案 > R如何划分这两个矩阵?

问题描述

我在名为 mat1, mat1[1, ] 的 3x5 矩阵中选择一行。我想将另一个 3x5 矩阵 mat2 除以 mat1[1, ]。当我做 mat1[1, ]/t(mat2) 时,我得到了正确的答案。我想知道的是,如果我不转置 mat2,R 如何执行除法?我试图按行、按列划分,但输出与 R 返回的 mat1[1, ]/mat2 不匹配。谁能给我解释一下?谢谢。

例子:

mat1 <- matrix(sample(1:50, 15, replace = T), byrow = T, ncol = 5)
mat2 <- matrix(sample(51:100, 15, replace = T), byrow = T, ncol = 5)
rowID <- c("grade 1", "grade 2", "grade 3", "grade 4", "grade 5", "grade 6")
colID <- c("school A", "school B", "school C", "school D", "school E")

rownames(mat1) <- rowID[1:3]
rownames(mat2) <- rowID[4:6]
colnames(mat1) <- colID
colnames(mat2) <- colID

> mat1
        school A school B school C school D school E
grade 1       46       30       25       16       39
grade 2       24       44        4       48       13
grade 3       27       40        2       43       17
> mat2
        school A school B school C school D school E
grade 4       80       74       71       81       83
grade 5       90       57       97       87       86
grade 6       68       71       96       87       63

现在我想将一年级学生的数量表示为同一学校 4、5、6 年级学生的比例。

> ratiograde1 <- mat1[1,] / t(mat2)
> ratiograde1
           grade 4   grade 5   grade 6
school A 0.5750000 0.5111111 0.6764706
school B 0.4054054 0.5263158 0.4225352
school C 0.3521127 0.2577320 0.2604167
school D 0.1975309 0.1839080 0.1839080
school E 0.4698795 0.4534884 0.6190476

以上产生了正确的比率。但是,当我简单地编写 mat1 / mat2(而不是转置 mat2)时,我想了解 R 如何派生以下一组值。

> mat1[1,] / mat2
         school A  school B  school C  school D  school E
grade 4 0.5750000 0.2162162 0.4225352 0.4814815 0.3012048
grade 5 0.3333333 0.6842105 0.2577320 0.5287356 0.1860465
grade 6 0.3676471 0.6478873 0.1666667 0.3448276 0.6190476

在上面,R 在 mat1[1, ] 中使用了哪些元素来除以 mat2 中的哪些元素以及以什么顺序?

标签: rmatrix

解决方案


您的示例不可重现,因为它抽取了一个随机样本,并且您没有set.seed先设置随机种子。只需创建数据并用于dput创建易于粘贴到您的问题中的版本。

您将向量除以矩阵,因为mat1[1, ]它是向量而不是矩阵。R 按列处理分母中的矩阵,因此在您的第一个示例中:46/80、30/74、25/71 等,因为在转置矩阵中,第一列是四年级学校。当矩阵未转置时,第一列是 schoolA ,第一列是 46/80 、 30/90 、 25/68 ,然后是 16/74 、 39/57 、 46/71 作为前两行第二列,因为 R 回收了向量中的值。


推荐阅读