【发布时间】:2020-02-04 02:46:55
【问题描述】:
我在名为 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
现在我想将 1 年级学生的数量表示为同一学校 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 中的哪些元素以及以什么顺序?
【问题讨论】:
-
将
mat2除以mat1将是mat2/mat1而不是您发布的内容。请发布您的意思的示例,我无法理解mat1[1, ]/t(mat2)与您声明的将矩阵除以另一个相同维度的目标之间的关系。 -
谢谢@RuiBarradas 我添加了一个例子。希望它能澄清我在问什么。