[R-br] Erro em função

Carlos Mendonça csaeslpv em centroin.com.br
Sexta Setembro 23 11:42:13 BRT 2011


Benilton, desculpe o trabalho, eu já havia entendido o que você sugeriu, mas
eu não posso agregar os dados por código, pois assim, eu teria para

cada código o valor do 1º e 3º quartis identicos, bem como, os limites
(superior e inferior).

Eu preciso que faça o cálculo dos quartis utilizando todos os valores da
variável pond de cada código.

Na verdade, o código inicial funcionou para um ano, mas quando eu executei
um outro ano, ele me apresentou aquela mensagem de erro que eu listei no

1º post, ou seja, "Erro em cut.default(coord, bins, labels = FALSE,
include.lowest = T) :
                            'breaks' não são únicos"

Obrigado,

Carlos Mendonça.



E eu vou explicar novamente... vc precisa agregar os dados
apropriadamente antes de executar equantilesByCounts().

O seu arquivo, originalmente, tem codigo, peso, val, mes e ano. Se vc
vai ignorar mes/ano (ou qq combinacao deles), vc precisa agregar os
dados de peso e val para, so' depois, determinar pond.

Depois de feito isso, a funcao que escrevi para vc funcionara' como
esperado.



Em 23 de setembro de 2011 07:03, Carlos Mendonça
<csaeslpv em centroin.com.br>escreveu:

> 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 em centroin.com.br
> > escreveu:
>
>>
>>
>> Em 31 de agosto de 2011 09:30, Carlos Mendonça <csaeslpv em 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
>
>


-- 
                Um abraço,

                Mendonça
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20110923/24ea5bc2/attachment.html>


Mais detalhes sobre a lista de discussão R-br