[R] Fwd: Percentiles/Quantiles with Weighting

Stavros Macrakis macrakis at alum.mit.edu
Wed Feb 18 05:25:38 CET 2009


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




More information about the R-help mailing list