将十分位数分配给分配

时间:2016-06-16 06:43:48

标签: r assign quantile

我需要将十进制分配给分布,但是以整数的形式。 像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

有没有人有这方面的代码?

2 个答案:

答案 0 :(得分:3)

您可以使用labels

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

这将返回一个因素。运行

as.numeric(as.character(x2))

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

答案 1 :(得分:1)

如果您正在使用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)) ]