Следуя отличным советам до, я сейчас пишу свою вторую функцию 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
. Три оконечных значения: NA
Теперь есть несколько идентификаторов клиентов, у которых есть "NA" для квинтиля. Кажется, если они были на самом низком разрыве, в этом случае 1, то они не были включены в функцию разреза.
Есть ли способ сделать cut
включением всех наблюдений?