Создать матрицу по слоистому массиву - PullRequest
1 голос
/ 11 ноября 2019

У меня есть массив чисел

x <- seq(1:10)

Я после матрицы с n строками. Вот пример с 3-строчной матрицей:

1   2   3  4  5  6  7  8  9  10
NA  1   2  3  4  5  6  7  8   9
NA  NA  1  2  3  4  5  6  7   8

Каков наилучший способ ее создания?

Ответы [ 2 ]

3 голосов
/ 11 ноября 2019

Существует странная маленькая функция с именем embed, которая будет это делать ...

t(embed(c(NA, NA, 1:10), 3))

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    1    2    3    4    5    6    7    8    9    10
[2,]   NA    1    2    3    4    5    6    7    8     9
[3,]   NA   NA    1    2    3    4    5    6    7     8

Для вектора x и матрицы из n строк эквивалент будет

t(embed(c(rep(NA, n-1), x), n))
2 голосов
/ 11 ноября 2019

Может быть, есть более простой способ сделать это, но один из способов создать эту матрицу будет

create_matrix <- function(x, n) {
   t(sapply(seq(n), function(m) c(rep(NA, m - 1), head(x, length(x) - m + 1))))
}

create_matrix(1:10, 3)

#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,]    1    2    3    4    5    6    7    8    9    10
#[2,]   NA    1    2    3    4    5    6    7    8     9
#[3,]   NA   NA    1    2    3    4    5    6    7     8


create_matrix(c(4, 3, 6, 8, 7), 4)

#     [,1] [,2] [,3] [,4] [,5]
#[1,]    4    3    6    8    7
#[2,]   NA    4    3    6    8
#[3,]   NA   NA    4    3    6
#[4,]   NA   NA   NA    4    3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...