Использование CUT и Quartile для создания разрывов в функции R

Следуя некоторым замечательным советам из предыдущего , я сейчас пишу свою вторую 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. Остались 3NA

Теперь есть некоторые идентификаторы клиентов, которые имеют «NA» для квинтиля. Кажется, если бы они были на самом нижнем изломе, в данном случае 1, то они не включались бы в функцию отсечки.

Есть ли способ включить cutвсе наблюдения?

20
задан Community 23 May 2017 в 11:54
поделиться