Benilton,

vou tentar explicar melhor o que eu preciso.
Eu tenho um arquivo com as variáveis codigo, peso, val, pond, mes e ano. Esse arquivo de +/- 1.500.000 observações, tem n observações para cada código por mês e ano. Na minha rotina eu esqueço a informação do mês, pois eu quero essa rotina por ano. Eu preciso calcular os quartis (1º e 3º) por código da variável pond ponderados pela variável val. Em seguida preciso calcular a diferença interquartílica e os limites (superior e inferior) com os resultados dos quartis. Depois, junto esse arquivo com os limites com o arquivo com todas as informações e retiro dele as observações cujo pond não esteja entre os limites. Executo essa  rotina 2 vezes.
Estou mandando os novos links com o código e os dados.
http://www.datafilehost.com/download-7fe849b1.html

http://www.datafilehost.com/download-0437cad6.html

 
Em 22 de setembro de 2011 10:51, Carlos Mendonça <csaeslpv@centroin.com.br> escreveu:


Em 31 de agosto de 2011 09:30, Carlos Mendonça <csaeslpv@centroin.com.br> escreveu:
Caros, estou utilizando a função abaixo que calcula os quartis ponderados que funcionou muito bem até agora.
 
tmp = subset(arq1, select=c(codigo, qtd, val))
equantileByCounts <- function(x, counts, qs){
    tot <- sum(counts)
    i <- order(x)
    x <- x[i]
    counts <- counts[i]
    partial <- cumsum(counts)
    qsObs <- qs*tot
    start <- floor(qsObs)
    end <- ceiling(qsObs)
    i <- length(qs)
    aux1 <- sapply(1:i,
                  function(.x, start, end, x){
                      coord <- c(start[.x], end[.x])
                      bins <- c(1, partial)
                      grps <- cut(coord, bins, labels=FALSE, include.lowest=T)
                      mean(x[grps])
                  }, start=start, end=end, x=x)
    names(aux1) <- names(qs)
    return(aux1)
}
aux1 <- do.call(rbind,
               lapply(split(tmp, tmp$codigo),
                      function(y)
                      equantileByCounts(y$qtd, y$val, c(.25, .75))))
 
 
O meu processamento é por trimestres e em apenas um deles deu a seguinte mensagem de erro:
 
 "Erro em cut.default(coord, bins, labels = FALSE, include.lowest = T) :
  'breaks' não são únicos"
Alguém saberia me dizer o que posso fazer?

                Um abraço,
 
                Carlos Mendonça.




--
                Um abraço,
 
                Mendonça




--
                Um abraço,
 
                Mendonça