在Julia中查找分位数
我需要一个像xtileStata 中的函数,给定一个向量,它返回每个 obs 属于哪个分位数。所以如果函数定义为
function xtile(vector; q= 4) #q = 4 by default returns quartiles
*** returns a vector with the same size as "vector", indicating which quantile each obs belongs to.
end
我想在以下方面使用它:
@pipe df |> transform(:height => xtile => :quantiles)
我知道Stella.jl提供了这样的功能。但是我无法安装该软件包,现在我想知道是否还有其他软件包。或者我可以自己实现它。
回答
虽然使用 CategoricalArrays 包是一个很好的解决方案,并且具有实际显示分位数含义的额外好处,但xtile仅使用 Julia 标准库就很容易实现:
using Statistics
function xtile(x; n=4)
q = quantile(x, LinRange(0, 1, n + 1))
map(v -> min(searchsortedlast(q, v), n), x)
end