dplyr :: ntile和statar :: xtile之间的区别

时间:2017-02-20 17:54:30

标签: r dplyr stata

我的理解是dplyr::ntilestatar::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个桶。

这些意思是一样的吗?

如果是这样,为什么他们给出不同的答案?

如果没有,那么:

  1. 有什么区别?

  2. 您何时应该使用其中一种?

1 个答案:

答案 0 :(得分:2)

感谢@alistaire指出dplyr::ntile只是在做:

function (x, n) { floor((n * (row_number(x) - 1)/length(x)) + 1) }

与分割成分位数类别不同,正如xtile所做的那样。

查看statar::xtile的代码导致statar::pctilestatar的{​​{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