我在 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/