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.a...@monash.edu> escreveu:
Date: Mon, 21 May 2012 00:17:10 +1000
From: Nevil Amos<nevil.a...@monash.edu>
To:r-help@r-project.org
Subject: [R] removeing only rows/columns with "na" value from square (
symmetrical ) matrix.
Message-ID:
<CAGUDtZJOW7x3sjZsnqf7uAQN6gKFg+EMqq=-hbqkgcwggaj...@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]]
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.