R 创建矩阵,其中所有对角线在反对角线方向上的值相同
我肯定这类矩阵有个名字,但不确定。在R 创建矩阵,其中所有对角线在反对角线方向上的值相同,r,matrix,R,Matrix,我肯定这类矩阵有个名字,但不确定。在R中,我想快速转换变量x: x = 1:10 x #[1] 1 2 3 4 5 6 7 8 9 10 进入一个矩阵,其中所有对角线(非主对角线)在一个方向上相同,反对角线方向: x 1 1 2 3 4 5 6 7 8 9 10 2 2 3 4 5 6 7
R
中,我想快速转换变量x
:
x = 1:10
x #[1] 1 2 3 4 5 6 7 8 9 10
进入一个矩阵,其中所有对角线(非主对角线)在一个方向上相同,反对角线方向:
x
1 1 2 3 4 5 6 7 8 9 10
2 2 3 4 5 6 7 8 9 10 NA
3 3 4 5 6 7 8 9 10 NA NA
4 4 5 6 7 8 9 10 NA NA NA
5 5 6 7 8 9 10 NA NA NA NA
6 6 7 8 9 10 NA NA NA NA NA
7 7 8 9 10 NA NA NA NA NA NA
8 8 9 10 NA NA NA NA NA NA NA
9 9 10 NA NA NA NA NA NA NA NA
10 10 NA NA NA NA NA NA NA NA NA
谢谢我们可以使用
数据表中的shift
library(data.table)
do.call(cbind, shift(x, 0:9, type = 'lead'))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 1 2 3 4 5 6 7 8 9 10
# [2,] 2 3 4 5 6 7 8 9 10 NA
# [3,] 3 4 5 6 7 8 9 10 NA NA
# [4,] 4 5 6 7 8 9 10 NA NA NA
# [5,] 5 6 7 8 9 10 NA NA NA NA
# [6,] 6 7 8 9 10 NA NA NA NA NA
# [7,] 7 8 9 10 NA NA NA NA NA NA
# [8,] 8 9 10 NA NA NA NA NA NA NA
# [9,] 9 10 NA NA NA NA NA NA NA NA
#[10,] 10 NA NA NA NA NA NA NA NA NA
在baser
中,我们可以使用embed
out <- embed(c(x, x), 10)
replace(out, lower.tri(out), NA)[, 10:1]
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 1 2 3 4 5 6 7 8 9 10
# [2,] 2 3 4 5 6 7 8 9 10 NA
# [3,] 3 4 5 6 7 8 9 10 NA NA
# [4,] 4 5 6 7 8 9 10 NA NA NA
# [5,] 5 6 7 8 9 10 NA NA NA NA
# [6,] 6 7 8 9 10 NA NA NA NA NA
# [7,] 7 8 9 10 NA NA NA NA NA NA
# [8,] 8 9 10 NA NA NA NA NA NA NA
# [9,] 9 10 NA NA NA NA NA NA NA NA
#[10,] 10 NA NA NA NA NA NA NA NA NA
#[11,] NA NA NA NA NA NA NA NA NA NA
out这里的替代解决方案是使用base R
f <- function(x) {
y <- x:10
length(y) <- 10
return(y)
}
sapply(x, f)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 2 3 4 5 6 7 8 9 10
[2,] 2 3 4 5 6 7 8 9 10 NA
[3,] 3 4 5 6 7 8 9 10 NA NA
[4,] 4 5 6 7 8 9 10 NA NA NA
[5,] 5 6 7 8 9 10 NA NA NA NA
[6,] 6 7 8 9 10 NA NA NA NA NA
[7,] 7 8 9 10 NA NA NA NA NA NA
[8,] 8 9 10 NA NA NA NA NA NA NA
[9,] 9 10 NA NA NA NA NA NA NA NA
[10,] 10 NA NA NA NA NA NA NA NA NA
f谢谢,但这不是很灵活,它只适用于1:10
,假设你有x,我假设x是你给出的数字序列。肯定会更新我的代码。@user63230如果您选中class(out)
对不起,我指的是矩阵的名称……标识等?@user63230对不起,我不知道它叫什么名字。