我的理解是dplyr::ntile
和statar::xtile
试图做相同的事情。但有时输出结果不同:
dplyr::ntile(1:10, 5)
# [1] 1 1 2 2 3 3 4 4 5 5
statar::xtile(1:10, 5)
# [1] 1 1 2 2 3 3 3 4 5 5
我正在将Stata代码转换为R代码,因此
statar::xtile
可以生成与原始Stata代码相同的输出结果,但我认为在R中dplyr::ntile
是等效的。根据Stata帮助文档,xtile用于:
创建包含分位数类别的变量
而
statar::xtile
显然是在复制这个功能。而
dplyr::ntile
则是:将输入向量分为n个桶的粗略排名。
这两个函数的意义是否相同?
如果是,那么它们为什么会给出不同的答案?
如果不是,那么:
1.有何区别?
2.何时应使用其中之一?
ntile
:function (x, n) { floor((n * (row_number(x) - 1)/length(x)) + 1) }
。xtile
稍微复杂一些。 基础R可能是这样的as.integer(cut(1:10, quantile(1:10, seq(0, 1, length.out = 5 + 1)), include.lowest = TRUE))
。在?quantile
中解释的类型也可能会有所帮助。 - alistairextile
文档请参见http://www.stata.com/manuals14/dpctile.pdf。 - Nick Coxntile
相同。有什么想法吗? - Dannyxtile
使用了不同的分位数算法类型。我会将其写成答案。 - Danny