[R] elegant solution to transform vector into percentages?

Adaikalavan Ramasamy ramasamy at cancer.org.uk
Wed Jul 27 00:21:15 CEST 2005


Why not write a function ? Here is one.

 mytable <- function(x, br){

   n  <- length(br)
  
   tb <- table( cut( x, breaks=c(-Inf, br, Inf) ) )
   tb <- 100 * tb / sum(tb)

   tb.n      <- paste( c("", br), c(br, ""), sep=" < x <= " )
   tb.n[1]   <- paste("x <= ", br[1], sep="")
   tb.n[n+1] <- paste("x > ",  br[n], sep="")

   names(tb) <- tb.n
   return(tb)
 }

 mytable( store, br=c(0.8, 1.2) )
       x <= 0.8 0.8 < x <= 1.2        x > 1.2
             25             25             50

You might want to do a bit more testing especially at the break points.
However I do not like the output of the above because the names of the
table overlaps. Here is another function that might have nicer output.

 mytable2 <- function(x, br){
   tb <- as.matrix( mytable( x=x, br=br ) )
   colnames(tb) <- "Percentage"
   return(tb)
 }

 mytable2( store, br=c(0.8, 1.2) )
                Percentage
 x <= 0.8               25
 0.8 < x <= 1.2         25
 x > 1.2                50

Hope this helps.

Regards, Adai



On Tue, 2005-07-26 at 15:48 -0400, jhainm at fas.harvard.edu wrote:
> Hi,
> 
> I am looking for an elegant way to transform a vector into percentages of values
> that meet certain criteria.
> 
> store<-c(1,1.4,3,1.1,0.3,0.6,4,5)
> 
> # now I want to get the precentages of values
> # that fall into the categories <=M , >M & <=N , >N
> # let
> M <-.8
> N <- 1.2
> # In my real example I have many more of these cutoff-points
> 
> # What I did is:
> 
> out <- matrix(NA,1,3)
> 
>   out[1,1] <- ( (sum(store<=M                ))  /length(store) )*100
>   out[1,2] <- ( (sum(store> M  & store<= N   ))  /length(store) )*100
>   out[1,3] <- ( (sum(store> N                ))  /length(store) )*100
> 
> colnames(out)<-c("percent<=M","percent>M & <=N","percent>N")
> out
> 
> But this gets very tedious if I have many cutoff-points. Does anybody know a
> more elegant way to do this task?
> 
> Thanks so much.
> 
> Cheers,
> Jens
> 
> ______________________________________________
> 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