[R] removeing only rows/columns with "na" value from square ( symmetrical ) matrix.
Rui Barradas
ruipbarradas at sapo.pt
Mon May 21 15:31:51 CEST 2012
Hello,
Try
while(TRUE){
ix <- apply(M, 2, function(x) sum(is.na(x)))
if(all(ix == 0)) break
ix <- max(which(ix == max(ix)))
M <- M[-ix , -ix]
}
M
Note that in the original there's really no difference between columns 9
and 10.
If in the above code you use 'min', column 9 is removed and it's still a
minimum of removals.
(Like in any case of a tie.)
Hope this helps,
Rui Barradas
Em 21-05-2012 11:00, Nevil Amos <nevil.amos at monash.edu> escreveu:
> Date: Mon, 21 May 2012 00:17:10 +1000
> From: Nevil Amos<nevil.amos at monash.edu>
> To:r-help at r-project.org
> Subject: [R] removeing only rows/columns with "na" value from square (
> symmetrical ) matrix.
> Message-ID:
> <CAGUDtZJOW7x3sjZsnqf7uAQN6gKFg+EMqq=-HBqKgcwgGaJu6g at mail.gmail.com>
> Content-Type: text/plain
>
> I have some square matrices with na values in corresponding rows and
> columns.
>
> M<-matrix(1:2,10,10)
> M[6,1:2]<-NA
> M[10,9]<-NA
> M<-as.matrix(as.dist(M))
> print (M)
>
> 1 2 3 4 5 6 7 8 9 10
> 1 0 2 1 2 1 NA 1 2 1 2
> 2 2 0 1 2 1 NA 1 2 1 2
> 3 1 1 0 2 1 2 1 2 1 2
> 4 2 2 2 0 1 2 1 2 1 2
> 5 1 1 1 1 0 2 1 2 1 2
> 6 NA NA 2 2 2 0 1 2 1 2
> 7 1 1 1 1 1 1 0 2 1 2
> 8 2 2 2 2 2 2 2 0 1 2
> 9 1 1 1 1 1 1 1 1 0 NA
> 10 2 2 2 2 2 2 2 2 NA 0
>
>
> How do I remove just the row/column pair( in this trivial example row 6 and
> 10 and column 6 and 10) containing the NA values?
>
> so that I end up with all rows/ columns that are not NA - e.g.
>
> 1 2 3 4 5 7 8 9
> 1 0 2 1 2 1 1 2 1
> 2 2 0 1 2 1 1 2 1
> 3 1 1 0 2 1 1 2 1
> 4 2 2 2 0 1 1 2 1
> 5 1 1 1 1 0 1 2 1
> 7 1 1 1 1 1 0 2 1
> 8 2 2 2 2 2 2 0 1
> 9 1 1 1 1 1 1 1 0
>
>
> if i use na omit I lose rows 1,2,6, and 9
> which is not what I want.
>
> thanks
> -- Nevil Amos Molecular Ecology Research Group Australian Centre for
> Biodiversity Monash University CLAYTON VIC 3800 Australia
> [[alternative HTML version deleted]]
More information about the R-help
mailing list