计算 R 中矩阵中的对角线和

Counting diagonal sums in a matrix in R

我正在处理一个具有不同概率的矩阵,我想在数据中添加不同对角线的总和 table。

以随机数为例:

我有:

df <- data.frame(`1` = c(1:5),
        `2` = c(1:5),
        `3` = c(1:5),
        `4` = c(1:5),
        `5` = c(1:5))

Table 输出:

  X1 X2 X3 X4 X5
1  1  1  1  1  1
2  2  2  2  2  2
3  3  3  3  3  3
4  4  4  4  4  4
5  5  5  5  5  5

一条对角线我希望能够得到(所需对角线以粗体显示)的总和:

   X1 X2 X3 X4 X5
Y1  1  **1**  1  1  1
Y2  2  2  **2**  2  2
Y3  3  3  3  **3**  3
Y4  4  4  4  4  **4**
Y5  5  5  5  5  5

我似乎找不到任何相关信息,但如果有人有解决方案或资源可以帮助我,我将不胜感激。

也许这有帮助

sum(df[(col(df)-1) == row(df)])
[1] 10

这个想法是利用 col/row 索引。当我们使用 col(df)-1 时,1 的索引向右移动,而 row(df) 没有移动

> col(df)-1
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    1    2    3    4
[2,]    0    1    2    3    4
[3,]    0    1    2    3    4
[4,]    0    1    2    3    4
[5,]    0    1    2    3    4
> row(df)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    1    1
[2,]    2    2    2    2    2
[3,]    3    3    3    3    3
[4,]    4    4    4    4    4
[5,]    5    5    5    5    5
> (col(df)-1) == row(df)
      [,1]  [,2]  [,3]  [,4]  [,5]
[1,] FALSE  TRUE FALSE FALSE FALSE
[2,] FALSE FALSE  TRUE FALSE FALSE
[3,] FALSE FALSE FALSE  TRUE FALSE
[4,] FALSE FALSE FALSE FALSE  TRUE
[5,] FALSE FALSE FALSE FALSE FALSE

sum(diag(as.matrix(df)[, -c(1:n)])) 其中 n 是要跳过的列数

这里是更多使用 diag:

提取或替换矩阵的对角线,或构造对角矩阵。

sum(diag(as.matrix(df)-1))

[1] 10