It this what you are looking for: > set.seed(1) > # create range for each possible class > # 'name' the values so you can use them in the 'sapply' function > lows<-c(a=1, b=2, c=3, d=4, e=5) > highs<-c(a=5, b=6, c=7, d=8, e=9) > > # data values > vals<-sample(1:10,100,replace=T) > > #classes > classes<-sample(letters[1:5],100,replace=T) > > # split the data so that you retain the 'classes' name > x.split <- split(vals, classes) > percentage <- sapply(names(x.split), function(.class){ + # compute the percentage based on 'class' + sum((x.split[[.class]] >= lows[.class]) & + (x.split[[.class]] <= highs[.class])) / length(x.split[[.class]]) * 100 + }) > percentage a b c d e 50.00000 45.00000 62.50000 54.54545 55.55556 >
On Fri, Jun 4, 2010 at 4:02 PM, Mark Ebbert <mark.ebb...@hci.utah.edu> wrote: > Dear R gurus, > > I am trying perform what I believe will be a pretty simple task, but I'm > struggling to figure out how to do it. I have two vectors of the same length, > the first is numeric and the second is factor. I understand that tapply is > perfect for applying a function to the numeric vector by subsets of the > factors in the second vector. My issue is trying to make use of two other > vectors within the custom function I've written for tapply. The two other > vectors are a high and low value for each subset I am breaking my data into, > and I want to calculate the percentage of data points that fall into each > respective range. I will attempt to provide a coherent example: > > # create range for each possible class > lows<-c(1,2,3,4,5) > highs<-c(5,6,7,8,9) > > # data values > vals<-sample(1:10,100,replace=T) > > #classes > classes<-sample(letters[1:5],100,replace=T) > > # Try to calculate percentage of values that fall > # into the respective range for the given class. > percentages<-tapply(vals,classes, > function(i){ > length(i[i>=lows[index] & i<=highs[index]])/length(i) # I > don't know how to actually keep an index count in tapply, but I'm guessing > there's a better way. > }) > > I really appreciate any help. > > ME > ______________________________________________ > 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. > -- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve? ______________________________________________ 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.