Quantis por níveis de fator em R

Eu tenho um quadro de dados e estou tentando criar uma nova variável no quadro de dados que tem os quantis de uma variável contínuavar1, para cada nível de um fatorstrata.

# some data
set.seed(472)
dat <- data.frame(var1 = rnorm(50, 10, 3)^2,
                  strata = factor(sample(LETTERS[1:5], size = 50, replace = TRUE))
                  )

# function to get quantiles
qfun <- function(x, q = 5) {
    quantile <- cut(x, breaks = quantile(x, probs = 0:q/q), 
        include.lowest = TRUE, labels = 1:q)
    quantile
}

Eu tentei usar dois métodos, nenhum dos quais produzem um resultado utilizável. Em primeiro lugar, tentei usaraggregate aplicarqfun para cada nível destrata:

qdat <- with(dat, aggregate(var1, list(strata), FUN = qfun))

Isso retorna os quantis por nível de fator, mas a saída é difícil de ser forçada a retornar a um quadro de dados (por exemplo, usandounlist não alinha os novos valores de variáveis ​​com as linhas corretas no quadro de dados).

Uma segunda abordagem foi fazer isso em etapas:

tmp1 <- with(dat, split(var1, strata))
tmp2 <- lapply(tmp1, qfun)
tmp3 <- unlist(tmp2)
dat$quintiles <- tmp3

Novamente, isso calcula os quantis corretamente para cada nível de fator, mas obviamente,aggregate eles não estão na ordem correta no quadro de dados. Podemos verificar isso colocando os "bins" de quantil no quadro de dados.

# get quantile bins
qfun2 <- function(x, q = 5) {
    quantile <- cut(x, breaks = quantile(x, probs = 0:q/q), 
        include.lowest = TRUE)
    quantile
}

tmp11 <- with(dat, split(var1, strata))
tmp22 <- lapply(tmp11, qfun2)
tmp33 <- unlist(tmp22)
dat$quintiles2 <- tmp33

Muitos dos valores devar1 estão fora das caixas dequantile2. Eu sinto que estou perdendo algo simples. Qualquer sugestão seria muito apreciada.

questionAnswers(2)

yourAnswerToTheQuestion