Как R делит эти две матрицы? - PullRequest
1 голос
/ 06 октября 2019

Я выбираю строку в матрице 3x5 под названием mat1, mat1 [1,]. Я хочу разделить еще одну матрицу 3x5, mat2, на mat1 [1,]. Я получаю правильный ответ, когда делаю mat1 [1,] / t (mat2). Я хотел бы знать, как R выполняет деление, если я не транспонирую mat2? Я попытался разделить на строку, на столбец, но вывод не совпадает с тем, что 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

Выше приведено правильное соотношение. Однако я хотел бы понять, как R получает следующий набор значений, когда я просто пишу mat1 / mat2 (вместо транспонирования mat2).

> 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 и в каком порядке?

1 Ответ

0 голосов
/ 07 октября 2019

Ваш пример не воспроизводим, поскольку он рисует случайную выборку, и вы не установили случайное начальное число с помощью set.seed. Просто создайте данные и используйте dput, чтобы создать версию, которую легко вставить в ваш вопрос.

Вы делите вектор на матрицу, поскольку mat1[1, ] - это вектор, а не матрица. R обрабатывает матрицу в знаменателе по столбцам, поэтому в вашем первом примере: 46/80, 30/74, 25/71 и т. Д., Поскольку в транспонированной матрице первый столбец - это школы 4 класса. Когда матрица не транспонирована, первый столбец - schoolA, и вы получаете 46/80, 30/90, 25/68 в качестве первого столбца, а затем 16/74, 39/57, 46/71 в качестве первых двух строк ввторой столбец, поскольку R повторяет значения в векторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...