Метод, который я использую, является одним из них или Hmisc::cut2(value, g=4)
:
temp$quartile <- with(temp, cut(value,
breaks=quantile(value, probs=seq(0,1, by=0.25), na.rm=TRUE),
include.lowest=TRUE))
Альтернативой может быть:
temp$quartile <- with(temp, factor(
findInterval( val, c(-Inf,
quantile(val, probs=c(0.25, .5, .75)), Inf) , na.rm=TRUE),
labels=c("Q1","Q2","Q3","Q4")
))
У первого есть побочный эффект маркировки квартилей ценностями, которые я считаю «хорошими», но если это не «хорошо для вас», или проблемы, поднятые в комментариях, были проблемой вы можете перейти с версии 2. Вы можете использовать labels=
в cut
, или вы можете добавить эту строку в свой код:
temp$quartile <- factor(temp$quartile, levels=c("1","2","3","4") )
Или даже быстрее, но немного более непонятно, как это работает, хотя это уже не фактор, а числовой вектор:
temp$quartile <- as.numeric(temp$quartile)