Hi all,

I'd like to write a piece of code which will remove columns from a matrix, if 
the column contains only one value, say every value in the column is a "3":

Matrix <- matrix(NA, nrow=5, ncol=4)
Matrix[,1] <- c(1,2,3,4,5)
Matrix[,2] <- c(3,3,3,3,3)
Matrix[,3] <- c(5,4,3,2,1)
Matrix[,4] <- c(5,1,4,3,2)

      [,1] [,2] [,3] [,4]
[1,]    1    3    5    5
[2,]    2    3    4    1
[3,]    3    3    3    4
[4,]    4    3    2    3
[5,]    5    3    1    2

What I have written so far is a loop which will see if all values are the same, 
a bit of a hack since it just checks all values are equal to the first value of 
the column, if not, by definition the column cannot contain only one 
value/variable/character:

removals<-c()
for(i in 1:ncol(Matrix)){
  if(all(Matrix[,i] == Matrix[[1,i]])){
    removals<-append(removals, i)
  }
}
new.Matrix <- Matrix[,-removals]

This works for matrices with numbers or characters.
My question is - is there a better or more efficient way of doing this, maybe 
with apply or something. My first thought was apply set to operate over all 
columns, but was unsure of the indexing and selecting columns to be deleted.

Thanks,

Ben W.

University of East Anglia (ENV): b.w...@uea.ac.uk
The Sainsbury Laboratory: ben.w...@sainsbury-laboratory.ac.uk

        [[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.

Reply via email to