Ниже приведен пример обработки матрицы как вектора и использования функций row()
и col()
для возврата соответствующих строк и столбцов записей, превышающих условие.
Сначала создайте несколько фиктивных данных:
set.seed(1)
m <- matrix(runif(25), ncol = 5)
diag(m) <- 0
Затем мы используем row()
и col()
для возврата матрицы с индексом строки или столбца для каждой записи в матрице.
mr <- row(m)
mc <- col(m)
mr
выглядит следующим образом, например:
> mr
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 2 2 2 2 2
[3,] 3 3 3 3 3
[4,] 4 4 4 4 4
[5,] 5 5 5 5 5
Теперь мы устанавливаем значение условия и выбираем те ячейки m
, которые превышают условие:
cond <- 0.95
want <- which(m > cond)
Имея эти ячейки, которые превышают условие, мы извлекаем уникальные индексы строк и столбцов для этих ячеек
rwant <- unique(mr[want])
cwant <- unique(mc[want])
. Эти строки и столбцы вы хотите установить на 0.
Здесь мы делаем этоустановка на ноль, первое копирование m
в m2
для сравнения:
m2 <- m
m2[rwant, ] <- 0
m2[, cwant] <- 0
Вот две матрицы:
> m
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0000000 0.89838968 0.2059746 0.4976992 0.9347052
[2,] 0.3721239 0.00000000 0.1765568 0.7176185 0.2121425
[3,] 0.5728534 0.66079779 0.0000000 0.9919061 0.6516738
[4,] 0.9082078 0.62911404 0.3841037 0.0000000 0.1255551
[5,] 0.2016819 0.06178627 0.7698414 0.7774452 0.0000000
> m2
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0000000 0.89838968 0.2059746 0 0.9347052
[2,] 0.3721239 0.00000000 0.1765568 0 0.2121425
[3,] 0.0000000 0.00000000 0.0000000 0 0.0000000
[4,] 0.9082078 0.62911404 0.3841037 0 0.1255551
[5,] 0.2016819 0.06178627 0.7698414 0 0.0000000