将十分位数分配给分布
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 是多余的)。
我需要以整数形式为分布分配十分位数。 就像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 是多余的)。