计算 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
我正在处理一个具有不同概率的矩阵,我想在数据中添加不同对角线的总和 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