R 主对角线变为反对角线

R 主对角线变为反对角线,r,diagonal,R,Diagonal,我需要变换主对角线 {matrix( 1 1 1 1, 0 2 2 2, 0 0 3 3, 0 0 0 4) } 进入: 我尝试了我能找到的所有操作符t(),arev(),flipud(),apply(x,2,rev)等等。没有积极的结果。希望你能帮助我。这对你有用吗?获取每列并“旋转”(因为缺少更好的单词)x个位置,其中x是列索引 res <- sapply(1:ncol(input),function(x){ #get relevant column base <- i

我需要变换主对角线

{matrix(
1 1 1 1,
0 2 2 2,
0 0 3 3,
0 0 0 4)
}
进入:


我尝试了我能找到的所有操作符
t()
arev()
flipud()
apply(x,2,rev)
等等。没有积极的结果。希望你能帮助我。

这对你有用吗?获取每列并“旋转”(因为缺少更好的单词)x个位置,其中x是列索引

res <- sapply(1:ncol(input),function(x){
  #get relevant column
  base <- input[,x]
  n <- length(base)
  indices <- 1:n
  #reshuffle indices: first above x, then below x
  out <- base[c(indices[indices>x],indices[indices<=x])]
  out
})

all(res==output)
[1] TRUE

res对于那些不太熟悉这些东西的人,你能用语言解释一下你是如何从输入到输出的吗?
out-ncol(out)]x=1:100y=101:200q=matrix(01001001)q1=matrix(01000101)for(i in 1:100){q[i:100-i+1,i]=x[i:100]q1[1:i,i+1]=y[1:i]}这样更好?@Nils;我不知道。。。请你举一个小例子来说明你的问题好吗。[PS如果这是一个答案,并且你很高兴它能起作用,你可以在答案部分写下来]谢谢,我可以用另一种方法解决它。是否可以只覆盖矩阵的一部分<代码>x=1:100y=101:200q=matrix(0100101)q1=matrix(0100101)for(1:100中的i){q[i:100-i+1,i]=x[i:100]q1[1:i,i+1]=y[i:1]q2=flipud(q1)}for(1:100中的j[100-j+1:100,j+1]=q2[100-j+1:100,j+1]=q2[100-j+1:100,j+1]
res <- sapply(1:ncol(input),function(x){
  #get relevant column
  base <- input[,x]
  n <- length(base)
  indices <- 1:n
  #reshuffle indices: first above x, then below x
  out <- base[c(indices[indices>x],indices[indices<=x])]
  out
})

all(res==output)
[1] TRUE
input <- structure(c(1, 0, 0, 0, 1, 2, 0, 0, 1, 2, 3, 0, 1, 2, 3, 4), .Dim = c(4L, 
4L))
output <- structure(c(0, 0, 0, 1, 0, 0, 1, 2, 0, 1, 2, 3, 1, 2, 3, 4), .Dim = c(4L, 
4L))