r - 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 中的哪些元素以及以什么顺序?
解决方案
您的示例不可重现,因为它抽取了一个随机样本,并且您没有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 回收了向量中的值。
推荐阅读
- javascript - Vue watch 两个链接的输入字段仅用于用户输入
- flutter - Flutter 更新 FutureBuilder 中的 Textfeild 值
- sql-server - 有没有办法通过逐行查找的 sql 表来循环计算?
- python - 在 SAML 中,当要对用户/密码对进行身份验证时,用户/密码对位于 AuthnRequest 中的什么位置?
- azure - 需要帮助在 Azure VM 上安装 SSL.com 证书
- android - 如何在 kotlin 中以编程方式更改文本颜色
- qt - 组织孩子的 Qt Quick2 自定义控件
- javascript - Typescript - 如何使用动态对象数组中的键动态键入对象
- typescript - 打字稿:无法推断类实例方法的已知返回类型
- c# - 尝试从浏览器 sessionStorage 中“getItem()”时,Blazor 失败