日期向量的分位数函数

owe*_*n88 2 sorting r date

我注意到基本的R quantile函数不支持日期参数。

我赞赏为日期定义分位数需要在定义中加以注意(即,如果您有6个日期并要求第25个百分位数,则需要定义合适的舍入)。

是否有这种分位数功能的有效实现,可以作为基础或其他程序包的一部分。

以下示例函数实质上实现了我感兴趣的功能(通过一些调整来处理第0个百分位数的情况),但是我认为可以实现更有效的实现。

#Date quantile function.
dquantile <- function(x, probs){

  sx <- sort(x)

  pos <- round( probs * length(x) )

  return( sx[pos] )
}

# Example.
dates <- as.Date("01/01/1900", "%d/%m/%Y") + floor( 36500 * runif(100000) )

dquantile(dates, c(0.001, 0.025, 0.975, 0.999) )
Run Code Online (Sandbox Code Playgroud)

G. *_*eck 8

If x is a vector of Dates and probs is a vector of probabilities:

# test input
x <- as.Date("2018-03-21") + 0:10
probs <- 1:9/10

as.Date(quantile(unclass(x), probs), origin = "1970-01-01")
Run Code Online (Sandbox Code Playgroud)

giving:

         10%          20%          30%          40%          50%          60% 
"2018-03-22" "2018-03-23" "2018-03-24" "2018-03-25" "2018-03-26" "2018-03-27" 
         70%          80%          90% 
"2018-03-28" "2018-03-29" "2018-03-30" 
Run Code Online (Sandbox Code Playgroud)


Jon*_*nny 5

quantile函数确实支持日期,您只需要指定type参数即可。您的问题可以通过以下方法解决:

dates <- as.Date("01/01/1900", "%d/%m/%Y") + floor( 36500 * runif(100000) )

quantile(dates, probs = c(0.001, 0.025, 0.975, 0.999), type = 1)

        0.1%         2.5%        97.5%        99.9% 
"1900-02-04" "1902-06-23" "1997-06-10" "1999-10-30" 
Run Code Online (Sandbox Code Playgroud)