我在 R 中有一个矩阵,我想得到:

Max off - diagonal elements
Min off – diagonal elements
Mean off –diagonal elements

对角线我使用了 max(diag(A)) , min(diag(A)) , mean(diag(A)) 并且工作得很好

但对于非对角线我试过
dataD <- subset(A, V1!=V2)

Error in subset.matrix(A, V1 != V2) : object 'V1' not found

使用:
colMeans(dataD) # get the mean for columns

但我无法获得 dataD b/c 它说找不到对象“V1”

谢谢!

最佳答案

这里 row()col() 辅助函数很有用。使用@James A,我们可以使用这个小技巧获得上非对角线:

> A[row(A) == (col(A) - 1)]
[1]  5 10 15

以及通过这个降低对角线:
> A[row(A) == (col(A) + 1)]
[1]  2  7 12

这些可以概括为您想要的任何对角线:
> A[row(A) == (col(A) - 2)]
[1]  9 14

并且不需要任何子集。

然后,在这些值上调用您想要的任何函数是一件简单的事情。例如。:
> mean(A[row(A) == (col(A) - 1)])
[1] 10

如果根据我的评论,您的意思是除对角线以外的所有内容,请使用
> diag(A) <- NA
> mean(A, na.rm = TRUE)
[1] 8.5
> max(A, na.rm = TRUE)
[1] 15
> # etc. using sum(A, na.rm = TRUE), min(A, na.rm = TRUE), etc..

所以这不会丢失,Ben Bolker 建议(在评论中)使用我上面提到的 row()col() 函数可以更巧妙地完成上面的代码块:
mean(A[row(A)!=col(A)])
min(A[row(A)!=col(A)])
max(A[row(A)!=col(A)])
sum(A[row(A)!=col(A)])

这是一个更好的解决方案。

关于R - 矩阵中非对角元素的最小值、最大值和平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13049575/

10-12 19:10