[R] Removing constants from a data frame

Liaw, Andy andy_liaw at merck.com
Mon Sep 20 12:22:33 CEST 2004


> From: Kjetil Brinchmann Halvorsen
> 
> David Forrest wrote:
> 
> >Suppose I have
> >
> >x<-data.frame(v1=1:4, v2=c(2,4,NA,7), v3=rep(1,4),
> >     v4=LETTERS[1:4],v5=rep('Z',4))
> >
> >or a much larger frame, and I wish to test for and remove 
> the constant
> >numeric columns.
> >
> >I made:
> >
> >   is.constant<-function(x){identical(min(x),max(x))}
> >
> >and
> >   apply(x,2,is.constant) # Works for numerics
> >   x[,-which(apply(x,2,is.constant))]
> >
> >I'd really like to be able to delete the constant columns 
> without losing
> >my non-numerics.  Ignoring the character columns would be OK.
> >
> >Any suggestions?
> >
> >Dave
> >  
> >
> what about defing is.constant as
> is.constant <-  function(x) {
>                      if (is.numeric(x))  identical(min(x), 
> max(x)) else 
> FALSE }

identical() is probably not the safest thing to use:
> x <- c(1, 2, NA)
> is.constant(x)
[1] TRUE

For data such as c(1, 1, 1, NA), I should think the safest answer should be
NA, because one really doesn't know whether that last number is 1 or not.

Andy
 
> -- 
> Kjetil Halvorsen.
> 
> Peace is the most effective weapon of mass construction.
>                --  Mahdi Elmandjra
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
> 
>




More information about the R-help mailing list