Определение разницы между первым номером матрицы и всеми последующими числами - PullRequest
1 голос
/ 01 ноября 2011

У меня есть список матриц, первая матрица которого выглядит следующим образом:

$x

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] 
[1,]    1    1    1    1    1    1    1    1    1     1     1     1     1     1     1     
[2,]    1    1    1    0    0    0    0    0    0     0     0     0     0     0     0     
[3,]    0    0    0    0    0    0    0    1    1     1     1     0     0     0     0     
[4,]    1    1    1    1    1    1    1    1    0     0     0     0     0     0     0

Я пытаюсь создать новую матрицу тех же размеров, которая будет указывать разницу в значениях между первойномер каждого ряда и каждого последующего номера.Я хотел бы использовать abs(), чтобы сделать это значение абсолютным значением этой разницы.Таким образом, в приведенном выше примере ожидаемый результат будет:

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] 
[1,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     0     
[2,]    0    0    0    1    1    1    1    1    1     1     1     1     1     1     1     
[3,]    0    0    0    0    0    0    0    1    1     1     1     0     0     0     0     
[4,]    0    0    0    0    0    0    0    0    1     1     1     1     1     1     1

Я знаю, что могу использовать apply, чтобы увидеть разницу между первым и последним столбцами:

abs(apply(x,1,diff, lag=15))
[1] 0 -1 0 -1

Однако я не уверен, как сделать этот итеративный процесс, в котором задержка увеличена с 1 до 15, для сбора информации для всей матрицы.У меня также есть несколько NA в моей исходной матрице, идентификатор которых, например, возвращается как NA в новой матрице.

В конечном счете, я хотел бы использовать решение с sapply, чтобы применить его ко всему моему списку, состоящему из 500 матриц.как в примере.

Ответы [ 2 ]

3 голосов
/ 01 ноября 2011

Вы имеете в виду разницу между первым и каждым значением в строке?

Например:

> set.seed(123)
> (m <- matrix(round(runif(64)), 4, 16))
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16]
[1,]    0    1    1    1    0    1    1    0    1     1     0     0     0     1     0     1
[2,]    1    0    0    1    0    1    1    0    1     0     0     0     1     0     1     0
[3,]    0    1    1    0    0    1    1    1    0     0     0     0     0     1     1     0
[4,]    1    1    0    1    1    1    1    1    0     0     0     0     0     0     0     0
> abs(m - m[, 1])
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16]
[1,]    0    1    1    1    0    1    1    0    1     1     0     0     0     1     0     1
[2,]    0    1    1    0    1    0    0    1    0     1     1     1     0     1     0     1
[3,]    0    1    1    0    0    1    1    1    0     0     0     0     0     1     1     0
[4,]    0    0    1    0    0    0    0    0    1     1     1     1     1     1     1     1
3 голосов
/ 01 ноября 2011

Я бы просто построил отдельную матрицу из первого столбца каждой исходной матрицы и затем взял бы abs разности двух матриц.Через минуту я обновлю пример:

Примерно так:

> m <- matrix(sample(0:1,25,replace = TRUE),5,5)
> m
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    1    1
[2,]    0    0    0    1    0
[3,]    1    1    1    0    1
[4,]    1    1    1    1    0
[5,]    1    0    1    0    0
> m1 <- matrix(m[,1],5,5)
> m1
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]    0    0    0    0    0
[3,]    1    1    1    1    1
[4,]    1    1    1    1    1
[5,]    1    1    1    1    1
> abs(m-m1)
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    1    1
[2,]    0    0    0    1    0
[3,]    0    0    0    1    0
[4,]    0    0    0    0    1
[5,]    0    1    0    1    1

И вы можете легко свернуть это в функцию для применения к списку матриц.

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