是.我认为(和R一样)有各种各样的方法,但这里有一个.它使用diagbase-R中的函数,并在获取对角线并计算它的平均值之前删除第一行和最后一列.
res <- mean(diag(mm[-1,-ncol(mm)]))
Run Code Online (Sandbox Code Playgroud)
使用的数据:
mm <- structure(c(0L, 2L, 1L, 1L, 1L, 1L, 0L, 3L, 1L, 1L, 1L, 1L, 0L,
4L, 1L, 1L, 1L, 1L, 0L, 5L, 1L, 1L, 1L, 1L, 0L), .Dim = c(5L,
5L), .Dimnames = list(c("a1", "a2", "a3", "a4", "a5"), c("a1",
"a2", "a3", "a4", "a5")))
Run Code Online (Sandbox Code Playgroud)
这是一种可能性
mean(m[col(m) == (row(m) - 1)])
## [1] 3.5
Run Code Online (Sandbox Code Playgroud)
这里的想法是获取列和行索引,然后只选择列==行-1时的值(正好在对角线下方-对角线是col ==行)
数据
m <- structure(c(0L, 2L, 1L, 1L, 1L, 1L, 0L, 3L, 1L, 1L, 1L, 1L, 0L,
4L, 1L, 1L, 1L, 1L, 0L, 5L, 1L, 1L, 1L, 1L, 0L), .Dim = c(5L,
5L), .Dimnames = list(c("a1", "a2", "a3", "a4", "a5"), c("a1",
"a2", "a3", "a4", "a5")))
Run Code Online (Sandbox Code Playgroud)