Hi,

I was wondering if there is an easy way to accomplish the following in R:
Often I want to apply a function, e.g. weighted.quantile from the Hmisc package
to grouped subsets of a data.frame (grouping variable) but then I also need to
hand over the weights which seems not possible with summaryBy or aggregate or
the like.

Is there a function to do this? Currently I do this with loops but it is very
slow.

I would be very grateful for any hints.

Thanks,
  Werner

Hi Werner,

you do not provide a reproducible example, but i guess the following may
give an idea.

### create a toy data frame
set.seed(1)
DF=data.frame(var = rnorm(30,2), factor = sample(30, replace = F),
               year = sample(10:12, 30, replace = T))
DF

### define a function that uses wwtd.quantile() function in Hmisc package
### to create a new variable based on weighted quantiles...
myquant=function(x){
       require(Hmisc)
       y=wtd.quantile(x[,1], w = x[,2], probs = c(0.0,0.5,1))
       labs=c("p50","p100")
       z=cut(x[,1],breaks=as.numeric(y), include.lowest = T, labels = labs)
       x$pc=z
       return(x)
       }

### split the data by variable year, i.e. grouping variable
### note that factor should be the second variable when splitting!!!
s1=split(DF[,c("var","factor","year")], DF[,c("year")])
s1
### aplly myquant  function to each subset by lapply()
s2=lapply(s1,myquant)
s2
### get the new data frame by unsplit() using year...
DF2=unsplit(s2,DF[,c("year")])
DF2

ozan

	[[alternative HTML version deleted]]

