我的理解是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代码相同的输出,但我认为dplyr::ntile
在R中是等效的。
Stata help表示xtile习惯于:
创建包含分位数类别的变量
statar::xtile
显然是在复制这个。
dplyr::ntile
是:
粗略排名,将输入向量分解为n个桶。
这些意思是一样的吗?
如果是这样,为什么他们给出不同的答案?
如果没有,那么:
有什么区别?
您何时应该使用其中一种?
答案 0 :(得分:2)
感谢@alistaire指出dplyr::ntile
只是在做:
function (x, n) { floor((n * (row_number(x) - 1)/length(x)) + 1) }
与分割成分位数类别不同,正如xtile
所做的那样。
查看statar::xtile
的代码导致statar::pctile
和statar
的{{3}}说明:
pctile计算类型2的分位数和加权分位数(类似于Stata _pctile)
因此,基数R中的statar::xtile
相当于:
.bincode(1:10, quantile(1:10, seq(0, 1, length.out = 5 + 1), type = 2),
include.lowest = TRUE)
# [1] 1 1 2 2 3 3 3 4 5 5