Создайте группирующую переменную g
на основе квантилей quant
, а затем разделите данные по ней.Входные данные не нужно сортировать.
x <- 1:12 # test data
quant <- quantile(x, c(0, .25, .75, 1))
g <- cut(x, quant, include.lowest = TRUE, lab = c("lo", "mid", "hi"))
split(x, g)
, что дает:
$`lo`
[1] 1 2 3
$mid
[1] 4 5 6 7 8 9
$hi
[1] 10 11 12
quantcut
Это можно сделать альтернативно в более компактной форме, используя quantcut из gtools.Это также делает более сложной обработку дубликатов.
library(gtools)
g <- quantcut(x, c(0, .25, .75, 1), lab = c("lo", "mid", "hi"))
split(x, g)