首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从执行顺序操作的向量创建三角矩阵

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

Stack Overflow用户
提问于 2015-06-15 21:05:00
回答 2查看 141关注 0票数 6

我一直在努力解决以下问题。

假设我有以下向量:

aux1<-c(0,0,0,4,5,0,7,0,0,10,11,12),其中的数字代表行的数目。

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

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

代码语言:javascript
运行
复制
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

在第一列中,与零不同的第一个元素与所有其他元素(即Matrix5,1 5,1=5-4=1和Matrix5,1 12,1=12-4=8)之间存在差异。另外,Matrix5,1 7,2=7-5=2,其中5是向量中不等于零的第二个元素。注意,Matrix10,3 10,3=10-7=3,其中7是第三个元素,不等于零,但在我的向量中是第七个元素。

我已经尝试过在一个循环中完成这个任务。我的当前代码如下:

代码语言:javascript
运行
复制
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
  }
}

不幸的是。我一直未能解决我的问题。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-15 21:32:26

使用sapplyifelse

代码语言:javascript
运行
复制
sapply(head(vv[vv>0],-1),function(y)ifelse(vv-y>0,vv-y,NA))

循环遍历正值(还应该删除最后一个元素),然后从原始向量中提取每个值。我使用ifelse替换负值。

代码语言:javascript
运行
复制
#       [,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
票数 1
EN

Stack Overflow用户

发布于 2015-06-15 21:25:58

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

代码语言:javascript
运行
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30854958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档