On Tue, 2005-07-26 at 15:48 -0400, [EMAIL PROTECTED] 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
Something alone the lines of: store <- c(1, 1.4, 3, 1.1, 0.3, 0.6, 4, 5) M <- 0.8 N <- 1.2 x <- hist(store, br = c(min(store), M, N, max(store)), plot = FALSE)$counts pct.x <- prop.table(x) * 100 names(pct.x) <- c("percent <= M","percent > M & <= N","percent > N") > pct.x percent <= M percent > M & <= N percent > N 25 25 50 I think that should do it. See ?hist for more information and take note of the 'include.lowest' and 'right' arguments relative to whether or not values are or are not included in the specified intervals. See ?prop.table as well. Also be acutely aware of potential problems with exact equality comparisons with floating point numbers and the break points...if you have a float value equal to a breakpoint in your vector. HTH, Marc Schwartz ______________________________________________ R-help@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