That was very clever. Worked perfectly, thanks!

And thanks to everyone else who provided feedback.

On Jun 5, 2010, at 5:46 AM, jim holtman wrote:

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

Reply via email to