gpt4 book ai didi

r - 使用 CUT 和 Quartile 在 R 函数中生成中断

转载 作者:行者123 更新时间:2023-12-01 18:11:10 24 4
gpt4 key购买 nike

已关注 some great advice from before ,我现在正在编写第二个 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)

表格(df$Quintile)

0-20   20-40   40-60    60-80   80-100 
40 39 44 38 36

您将在此处看到,在我的示例数据中,我创建了 200 个观察值,但仅通过 table 列出了 197 个观察值。剩下的 3 个是 NA

现在,有些 clientID 的五分位数为“NA”。看起来如果它们处于最低中断(在本例中为 1),那么它们不包含在剪切函数中。

有没有办法让cut包含所有观察结果?

最佳答案

尝试以下操作:

set.seed(700)

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))

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"), include.lowest=TRUE)
}
df$Quintile <- sapply(df$orders, ApplyQuintiles)
table(df$Quintile)

0-20 20-40 40-60 60-80 80-100
40 41 39 40 40

我在你的剪切函数中包含了 include.lowest=TRUE ,这似乎使它起作用。有关更多详细信息,请参阅?cut

关于r - 使用 CUT 和 Quartile 在 R 函数中生成中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11728419/

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