Some minor improvements and corrections below # Simple weighted quantile # # v A vector of sortable observations # w A numeric vector of positive weights # p The quantile 0<=p<=1 # # Nothing fancy: no interpolation etc.; NA cases not thought through
wquantile <- function(v,w=rep(1,length(v)),p=.5) { if ( !is.numeric(w) || length(v) != length(w) ) stop("Values and weights must be equal-length vectors") if ( !is.numeric(p) || any( p<0 | p>1) ) stop("Quantiles must be 0<=p<=1") if ( min(w) < 0 ) stop("Weights must be non-negative numbers") ranking <- order(v) sumw <- cumsum(w[ranking]) plist <- sumw / sumw[ length(sumw) ] sapply(p, function(p) v [ ranking [ which.max( plist >= p ) ] ] ) } I would appreciate any comments people have on this -- whether correctness, efficiency, style, .... -s ______________________________________________ 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.