Как сформировать матрицу логических «1» и «0», используя два вектора и логические операторы в r? - PullRequest
1 голос
/ 29 апреля 2019

Вот код Matlab для формирования матрицы логических значений '0' и '1'

 A=[1 2 3 4 5 6 7 8 9 10  ];
 N = numel(A);
 step = 2;    % Set this to however many zeros you want to add each column
 index = N:-step:1;
 val = (1:N+step).' <= index;

, что приводит к

 val=

 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     0
 1     1     1     1     0
 1     1     1     0     0
 1     1     1     0     0
 1     1     0     0     0
 1     1     0     0     0
 1     0     0     0     0
 1     0     0     0     0
 0     0     0     0     0
 0     0     0     0     0

Как выполнить ту же задачу в rв частности val = (1:N+step).' <= index этот шаг?

1 Ответ

2 голосов
/ 29 апреля 2019

Один из вариантов:

i <- seq_len(ncol(m1))
sapply(rev(i), function(.i) {
         m1[,.i][sequence(.i *2)] <- 1
         m1[,.i]
   })
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    1    1    1    1
# [2,]    1    1    1    1    1
# [3,]    1    1    1    1    0
# [4,]    1    1    1    1    0
# [5,]    1    1    1    0    0
# [6,]    1    1    1    0    0
# [7,]    1    1    0    0    0
# [8,]    1    1    0    0    0
# [9,]    1    0    0    0    0
#[10,]    1    0    0    0    0
#[11,]    0    0    0    0    0
#[12,]    0    0    0    0    0

Или векторизация

i1 <- rep(i,  rev(2*i))
m1[cbind(ave(i1, i1, FUN = seq_along), i1)] <- 1
m1
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    1    1    1    1
# [2,]    1    1    1    1    1
# [3,]    1    1    1    1    0
# [4,]    1    1    1    1    0
# [5,]    1    1    1    0    0
# [6,]    1    1    1    0    0
# [7,]    1    1    0    0    0
# [8,]    1    1    0    0    0
# [9,]    1    0    0    0    0
#[10,]    1    0    0    0    0
#[11,]    0    0    0    0    0
#[12,]    0    0    0    0    0

Или другой вариант без предварительного создания matrix

n <- 5
i1 <- seq(10, 2, by = -2)
r1 <- c(rbind(i1, rev(i1)))
matrix(rep(rep(c(1, 0), n), r1), ncol = n)
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    1    1    1    1
# [2,]    1    1    1    1    1
# [3,]    1    1    1    1    0
# [4,]    1    1    1    1    0
# [5,]    1    1    1    0    0
# [6,]    1    1    1    0    0
# [7,]    1    1    0    0    0
# [8,]    1    1    0    0    0
# [9,]    1    0    0    0    0
#[10,]    1    0    0    0    0
#[11,]    0    0    0    0    0
#[12,]    0    0    0    0    0

данные

m1 <- matrix(0, 12, 5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...