日期向量的分位数函数

时间:2018-03-21 11:46:54

标签: r sorting 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) )

2 个答案:

答案 0 :(得分:4)

如果x是日期的向量,probs是概率向量:

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

as.Date(quantile(unclass(x), probs), origin = "1970-01-01")

,并提供:

         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" 

答案 1 :(得分:2)

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"