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]]
______________________________________________
[email protected] 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.