gpt4 book ai didi

r - 从执行顺序操作的向量创建三角矩阵

转载 作者:行者123 更新时间:2023-12-04 15:21:10 25 4
gpt4 key购买 nike

我一直在尝试解决以下问题。

假设我有以下向量:
aux1<-c(0,0,0,4,5,0,7,0,0,10,11,12)其中数字代表行号。

我想计算这个向量的不同元素之间的距离,固定第一个组件,然后是第二个,依此类推。

如果元素为零,我不想计算它,所以我把一个 NA 代替。我想要的输出应该是这样的:

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

在第一列中,我有第一个不为零的元素与所有其他元素之间的差异,即 Matrix[5,1]=5-4=1 和 Matrix[12,1]=12-4=8。此外,Matrix[7,2]=7-5=2,其中 5 是向量中不等于 0 的第二个元素。请注意,Matrix[10,3]=10-7=3,其中 7 是不等于零的第三个元素,但我的向量中的第七个元素。

我试图在循环中做到这一点。我当前的代码如下所示:
M=matrix(nrow=N-1, ncol=N-1))

for (i in 1:N-1){
for (j in 1:N-1){
if(j<=i)
next
else
if(aux1[j]>0)
M[j,i]=aux1[j]-aux1[i]
else
M[j,i]=0
}
}

很遗憾。我一直无法解决我的问题。任何帮助将不胜感激。

最佳答案

您可以尝试以下操作(在@thela 的慷慨帮助下)

res <- outer(aux1, head(aux1[aux1 > 0], -1), `-`)
is.na(res) <- res <= 0
# [,1] [,2] [,3] [,4] [,5]
# [1,] NA NA NA NA NA
# [2,] NA NA NA NA NA
# [3,] NA NA NA NA NA
# [4,] NA NA NA NA NA
# [5,] 1 NA NA NA NA
# [6,] NA NA NA NA NA
# [7,] 3 2 NA NA NA
# [8,] NA NA NA NA NA
# [9,] NA NA NA NA NA
# [10,] 6 5 3 NA NA
# [11,] 7 6 4 1 NA
# [12,] 8 7 5 2 1

关于r - 从执行顺序操作的向量创建三角矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30854958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com