Я пытаюсь заполнить матрицу в R, где конечный результат будет игнорировать диагональные элементы, а значения будут заполняться по диагонали. Простой пример того, что я имею в виду, если я возьму простую матрицу 3x3, подобную показанной ниже:
ab <- c(1:9)
mat <- matrix(ab,nrow=3,ncol=3)
colnames(mat)<- paste0("x", 1:3)
rownames(mat)<- paste0("y", 1:3)
mat
x1 x2 x3
y1 1 4 7
y2 2 5 8
y3 3 6 9
То, чего я хочу достичь, это заполнить диагонали 0 и сдвинуть все остальные значения вокругдиагональ. Так, например, если я просто использую diag(mat)<-0
, что приводит к следующему:
x1 x2 x3
y1 0 4 7
y2 2 0 8
y3 3 6 0
В то время как результат, который я ищу, выглядит примерно так (где значения оборачиваются вокруг диагонали):
x1 x2 x3
y1 0 3 5
y2 1 0 6
y3 2 4 0
Меня не волнуют значения, которые выталкиваются из матрицы (т. Е. 7,8,9).
Есть предложения?
Спасибо
РЕДАКТИРОВАТЬ: Решение, приведенное ниже, кажется, решил проблему