当前位置:  开发笔记 > 编程语言 > 正文

n中的ntile和cut之间的差异然后是R中的quantile()函数

如何解决《n中的ntile和cut之间的差异然后是R中的quantile()函数》经验,为你挑选了1个好方法。

我发现了两个线程对这个话题在R.计算十分位数然而,这两种方法,即dplyr::ntilequantile()产生不同的输出.实际上,dplyr::ntile()无法输出正确的十分位数.

方法1:使用ntile() 从R:将数据集拆分为四分位数/十分位数.什么是正确的方法?线程,我们可以使用ntile().

这是我的代码:

vector<-c(0.0242034679584454, 0.0240411606258083, 0.00519255930109344, 
  0.00948031338483081, 0.000549450549450549, 0.085972850678733, 
  0.00231687756193192, NA, 0.1131625967838, 0.00539244534707915, 
  0.0604885614579294, 0.0352030947775629, 0.00935626135385923, 
  0.401201201201201, 0.0208212839791787, NA, 0.0462887301644538, 
  0.0224952741020794, NA, NA, 0.000984952654008562)

ntile(vector,10)

输出是:

ntile(vector,10)
5  5  2  3  1  7  1 NA  8  2  7  6  3  8  4 NA  6  4 NA NA  1

如果我们分析这个,我们看到没有第10个分位数!

方法2:使用quantile() 现在,让我们使用如何通过在数据框线程中对列进行排序来快速形成组(四分位数,十分位数等)中的方法.

这是我的代码:

as.numeric(cut(vector, breaks=quantile(vector, probs=seq(0,1, length  = 11), na.rm=TRUE),include.lowest=TRUE))

输出是:

 7  6  2  4  1  9  2 NA 10  3  9  7  4 10  5 NA  8  5 NA NA  1

我们可以看到,输出完全不同.我在这里错过了什么?我很感激任何想法.

这是一个ntile()功能错误吗?



1> DAVL..:

In dplyr::ntile NA始终是最后一个(最高等级),这就是为什么在这种情况下你没有看到第10个十分位数.如果您希望十分位数不考虑NAS,你可以这样定义一个函数在这里,我用下一个:

ntile_na <- function(x,n)
{
  notna <- !is.na(x)
  out <- rep(NA_real_,length(x))
  out[notna] <- ntile(x[notna],n)
  return(out)
}

ntile_na(vector, 10)
# [1]  6  6  2  4  1  9  2 NA  9  3  8  7  3 10  5 NA  8  5 NA NA  1

此外,quantile有9种计算分位数的方法,你使用默认值,即数字7(你可以检查?stats::quantile不同的types,这里有关于它们的讨论).

如果你试试

as.numeric(cut(vector, 
               breaks = quantile(vector, 
                                 probs = seq(0, 1, length = 11), 
                                 na.rm = TRUE,
                                 type = 2),
               include.lowest = TRUE))
# [1]  6  6  2  4  1  9  2 NA  9  3  8  7  3 10  5 NA  8  5 NA NA  1

你得到的结果与使用的结果相同ntile.

总结:它不是一个bug,它只是实现它们的不同方式.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有