2013-06-03 58 views
1

我在R編程時遇到了問題。從矩陣中,我怎樣才能找到每行的中位數排除對角線?在R中找到排除對角線的中位數

例:矩陣的4x4

0 1 2 3 

1 0 1 2 

2 1 0 1 

3 2 1 0 

我想找到的每一行除對角線的中位數(在此前,該診斷= 0)

我已經試過:

diag(A) <- NA 
mean(A, na.rm = TRUE) # doesn't work 

apply(A, 1, median) # it works but the calculation including the diagonal. 

回答

2

試試這個:

A <- matrix(c(0,1,2,3,1,0,1,2,2,1,0,1,3,2,1,0),nrow=4) 
sapply(1:4, function(x) median(A[x,-x])) 

[1] 2 1 1 2 
1

我不知道你爲什麼使用mean();你爲什麼不試試median()?這裏有:

A <- read.table(text="0 1 2 3 
1 0 1 2 
2 1 0 1 
3 2 1 0", header=F) 
A <- as.matrix(A) 
diag(A) <- NA 

A 
    V1 V2 V3 V4 
[1,] NA 1 2 3 
[2,] 1 NA 1 2 
[3,] 2 1 NA 1 
[4,] 3 2 1 NA 

myFun <- function(x){ median(x, na.rm=T)} 
apply(A, 1, FUN=myFun) 
[1] 2 1 1 2