gpt4 book ai didi

r - R中ntile和cut之间的区别,然后分位数()函数

转载 作者:行者123 更新时间:2023-12-03 22:04:27 26 4
gpt4 key购买 nike

我在该主题上找到了两个线程来计算R中的十分位数。但是,这两种方法,即dplyr::ntilequantile()产生不同的输出。实际上,dplyr::ntile()无法输出适当的十进制。

方法1:使用ntile()
R: splitting dataset into quartiles/deciles. What is the right method?线程中,我们可以使用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


如果我们对此进行分析,就会发现没有第十个分位数!

方法2:使用分位数()
现在,让我们使用 How to quickly form groups (quartiles, deciles, etc) by ordering column(s) in a data frame线程中的方法。

这是我的代码:

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()函数中的错误吗?

最佳答案

dplyr::ntile中,NA总是最后一个(最高排名),这就是为什么在这种情况下看不到十分位数的原因。如果您不希望decil考虑NA,则可以定义一个函数,例如我接下来要使用的here

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中查找不同的 type,在 here中进行有关其的讨论)。

如果你试试

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,只是实现它们的方式不同。

关于r - R中ntile和cut之间的区别,然后分位数()函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41653562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com