Używanie CUT i Quartile do generowania przerw w funkcji R
Następującykilka świetnych rad od wcześniejszych, Piszę teraz moją drugą funkcję R i stosuję podobną logikę. Jednak staram się zautomatyzować trochę więcej i może być zbyt mądry dla mojego dobra.
Chcę podzielić klientów na kwintyle na podstawie liczby zamówień. Oto mój kod do zrobienia:
# 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
Zobaczysz tutaj, że w moich przykładowych danych stworzyłem 200 obserwacji, ale tylko 197 jest wymienionych przeztable
. Trzy pozostałe sąNA
Teraz są pewne identyfikatory klientów, które mają „NA” dla kwintyla. Wygląda na to, że jeśli znajdowały się na najniższym poziomie, w tym przypadku 1, to nie zostały uwzględnione w funkcji cięcia.
Czy istnieje sposób na zrobienie tegocut
włącznie ze wszystkimi obserwacjami?