主对角线成反对角线

时间:2015-12-15 12:54:22

标签: r diagonal

我需要变换主对角线

{matrix(
1 1 1 1,
0 2 2 2,
0 0 3 3,
0 0 0 4)
}

成:

{matrix(
0 0 0 1,
0 0 1 2,
0 1 2 3,
1 2 3 4)
}

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

1 个答案:

答案 0 :(得分:0)

这对你有用吗?取每列并'旋转'(缺少更好的单词)x places,其中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

使用的数据:

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))