r - 创建矩阵,其中所有对角线在反对角方向上的值相同
问题描述
我确定这种类型的矩阵有一个名称,但不确定。在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
使用data.table
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
中base R
,我们可以使用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
推荐阅读
- ios - iOS Inapp 购买后订阅 upcell cancel_date_ms 值仍为空
- ffmpeg - 错误:成员访问不完整类型“AVFormatInternal”
- python - ValueError:当我尝试执行 fit_generator() 时,无法将输入数组从形状 (97,2048) 广播到形状 (97)
- r - 如何在 R 中下载“Afinn”和“NRC”词典?
- html - 在 angularjs 的选择选项中设置值
- vue.js - 在正在观看 vuex 状态的观察者中切换 GSAP 动画的问题
- azure-devops - Azure DevOps:由 git commit 触发的错误管道
- c++ - 如果使用 /MTd,则在 boost::interprocess::shared_memory_object 中崩溃
- c - 以下代码段的输出是什么?为什么?
- javascript - 调用 Map 对象的 Array 键