将十分位数分配给分布

Assign deciles to distribution

我需要以整数形式为分布分配十分位数。 就像1应该对应第一个十分位,2对应第二个,3对应第三个... 目前我正在使用以下代码,但它并不完全符合我的要求。

cut(x, breaks = quantile(data, probs = seq(0, 1, 0.1)))

所以,不是这种类型的结果:

(0,100] (100,200]  

我想要这样的东西:

1   90
2   130
2   150
3   230

有人已经有这方面的代码了吗?

如果您使用的是 data.frame.,您可以这样做:

df$decile <- cut(df$x, breaks= quantile(df$x, probs= seq(0, 1, by= 0.1)), 
            include.lowest= TRUE, 
            labels= c(1:10))

如果您想使用 data.table 方法

library(data.table)

setDT(df)[, decile := cut(x, breaks= quantile(x, probs= seq(0, 1, by= 0.1)), 
                          include.lowest= TRUE, 
                          labels= c(1:10)) ]

您可以在 cut

中使用 labels 参数
x2 <- cut(x, breaks = quantile(x, probs = seq(0, 1, 0.1)), 
  labels = 1:10, include.lowest = TRUE)

这将 return 成为一个因素。 运行

as.numeric(as.character(x2))

将其转换为整数(是的,我知道在这种特殊情况下 as.character 是多余的)。