根据之前的一些很好的建议,我现在正在编写我的第二个 R 函数并使用类似的逻辑。但是,我正在尝试更多地自动化,并且可能对我自己的利益变得太聪明了。
我想根据订单数量将客户分成五等份。这是我的代码:
# sample data
clientID <- round(runif(200,min=2000, max=3000),0)
orders <- round(runif(200,min=1, max=50),0)
df <- df <- data.frame(cbind(clientID,orders))
#function to break them into quintiles
ApplyQuintiles <- function(x) {
cut(x, breaks=c(quantile(df$orders, probs = seq(0, 1, by = 0.20))),
labels=c("0-20","20-40","40-60","60-80","80-100"))
}
#Add the quintile to the dataframe
df$Quintile <- sapply(df$orders, ApplyQuintiles)
table(df$Quintile)
0-20 20-40 40-60 60-80 80-100
40 39 44 38 36
您会在此处看到,在我的示例数据中,我创建了 200 个观察值,但通过 列出的只有 197 个table
。剩下的3个是NA
现在,有些客户端 ID 的五分位数为“NA”。似乎如果它们处于最低中断,在本例中为 1,那么它们不包含在 cut 函数中。
有没有办法cut
包容所有的观察?