Re: [R-br] Somar vendas por semana e por mês

Boas. Obrigado pela dica, penso que a função aggregate() resolve mas não consigo utilizar. Tenho um ficheiro CSV e o que pretendo é em cada linha somar as vendas totais por SEMANA. Tenho os dados seguintes mas apenas com as colunas DATA e QTD: *SEMANA* *DATA* *QTD* 45 05-11-2003 1 46 11-11-2003 1 46 11-11-2003 1 46 11-11-2003 1 46 11-11-2003 1 46 11-11-2003 1 46 11-11-2003 1 47 20-11-2003 1 48 26-11-2003 1 48 27-11-2003 1 E o que pretendo é somar as quantidades em cada dia de forma a ficar igualmente com as colunas DATA e QTD: *SEMANA* *DATA* *QTD* 45 05-11-2003 1 46 11-11-2003 6 47 20-11-2003 1 48 26-11-2003 2 Acrescentei a coluna SEMANA apenas para o exemplo porque é o que pretendo ter em consideração, até porque se não der para fazer de forma automática terei de fazer isto manualmente e somar para as mais de 5 000 linhas... Podem dar uma ajuda? E depois é suposto exportar esta agregação para um ficheiro? Como? Já procurei no google mas ainda não consegui fazer no meu caso em particular. Obrigado. Cumps.

*agreggate(df$QTD,by=list(SEMANA=df$SEMANA,DATA=df$DATA,sum)* * * * * * * Em 18 de agosto de 2012 14:32, Hugo Sena <hugosena@gmail.com> escreveu:
Boas. Obrigado pela dica, penso que a função aggregate() resolve mas não consigo utilizar.
Tenho um ficheiro CSV e o que pretendo é em cada linha somar as vendas totais por SEMANA.
Tenho os dados seguintes mas apenas com as colunas DATA e QTD: *SEMANA* *DATA* *QTD* 45 05-11-2003 1 46 11-11-2003 1 46 11-11-2003 1 46 11-11-2003 1 46 11-11-2003 1 46 11-11-2003 1 46 11-11-2003 1 47 20-11-2003 1 48 26-11-2003 1 48 27-11-2003 1
E o que pretendo é somar as quantidades em cada dia de forma a ficar igualmente com as colunas DATA e QTD: *SEMANA* *DATA* *QTD* 45 05-11-2003 1 46 11-11-2003 6 47 20-11-2003 1 48 26-11-2003 2
Acrescentei a coluna SEMANA apenas para o exemplo porque é o que pretendo ter em consideração, até porque se não der para fazer de forma automática terei de fazer isto manualmente e somar para as mais de 5 000 linhas...
Podem dar uma ajuda? E depois é suposto exportar esta agregação para um ficheiro? Como? Já procurei no google mas ainda não consegui fazer no meu caso em particular.
Obrigado. Cumps.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

@Leandro Marino-2 Obrigado pela ajuda. Presumo que no final seja necessário acrescentar " ) " certo? De qualquer forma dá-me o seguinte erro: *Error in df$QTD : object of type 'closure' is not subsettable* O que estará a acontecer de errado? Obrigado. Cumps.

. E algum problema no tipo de dado. Se você não puder enviar por motivos de sigilo, envie o resultado do str(df$QTD) Enviado de um dispositivo móvel. Sent from a mobile device. Em 18/08/2012 19:28, "Hugo Sena" <hugosena@gmail.com> escreveu:
@Leandro Marino-2
Obrigado pela ajuda. Presumo que no final seja necessário acrescentar " ) " certo?
De qualquer forma dá-me o seguinte erro:
*Error in df$QTD : object of type 'closure' is not subsettable*
O que estará a acontecer de errado?
Obrigado. Cumps.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Na realidade tem um erro agreggate(df$QTD,by=list( SEMANA=df$SEMANA,DATA=df$DATA) ,sum) Veja aonde está o parênteses Enviado de um dispositivo móvel. Sent from a mobile device. Em 18/08/2012 19:39, "Leandro Marino" <leandromarino@leandromarino.com.br> escreveu:
. E algum problema no tipo de dado. Se você não puder enviar por motivos de sigilo, envie o resultado do str(df$QTD)
Enviado de um dispositivo móvel. Sent from a mobile device. Em 18/08/2012 19:28, "Hugo Sena" <hugosena@gmail.com> escreveu:
@Leandro Marino-2
Obrigado pela ajuda. Presumo que no final seja necessário acrescentar " ) " certo?
De qualquer forma dá-me o seguinte erro:
*Error in df$QTD : object of type 'closure' is not subsettable*
O que estará a acontecer de errado?
Obrigado. Cumps.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

@Leandro Marino-2 Coloquei o ficheiro em: http://goo.gl/er5Pu Mas queria que agregasse automaticamente os dados em somatórios por semana (ver acima) porque a coluna da semana NÃO existe e deverá corresponder às semanas do ano (de segunda a domingo), ex.: semana 1, semana 2, semana 3.... Podes ajudar? Cumps.

*Hugo,* * * *não costumo lidar muito com dados temporais assim. Sugiro dar uma pesquisada em pacotes e funções que lidem com datas. * * * *O Henrique (membro aqui da lista) certa vez me mostrou algumas funções bem interessantes, mas não consegui localizá-las.* * * *Se souber ingles tente fazer buscas no google com o que você quer e "[r]" tem grandes chances de encontrar respostas na lista internacional do R.* * * *A função que lhe passei vai funcionar e inclusive ela é capaz de agregar por data, no entanto, você precisa de alguma forma converter a data para semana.* * * *Um abraço,* * * * * Em 18 de agosto de 2012 21:20, Hugo Sena <hugosena@gmail.com> escreveu:
@Leandro Marino-2
Coloquei o ficheiro em: http://goo.gl/er5Pu
Mas queria que agregasse automaticamente os dados em somatórios por semana (ver acima) porque a coluna da semana NÃO existe e deverá corresponder às semanas do ano (de segunda a domingo), ex.: semana 1, semana 2, semana 3....
Podes ajudar?
Cumps.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

@Leandro Marino-2 Já procurei no google e encontrei a página abaixo que supostamente resolve o meu problema, a questão é que sou novato em R e não consigo adaptar. https://stat.ethz.ch/pipermail/r-help/2007-July/137045.html Alguma ajuda? Obrigado por tudo. Cumps.

@andrebvs<http://r-br.2285057.n4.nabble.com/template/NamlServlet.jtp?macro=user_nodes&user=373924> Muito obrigado pela ajuda. Quase, quase que resolve. Isto rebenta quando: - Os dias 26 e 27 correspondem ambos à semana 48 - Quando se colocam vários meses baralha-se todo Para ver as semanas fui a este site: www.calendario-365.com.br/calend%C3%A1rio-2003.html Alguma ajuda e obrigado a todos. Cumps

*Hugo,* * * *dê uma olhada neste topico...* * * https://stat.ethz.ch/pipermail/r-help/2003-December/043610.html Em 25 de agosto de 2012 15:15, Hugo Sena <hugosena@gmail.com> escreveu:
@andrebvs<http://r-br.2285057.n4.nabble.com/template/NamlServlet.jtp?macro=user_nodes&user=373924>
Muito obrigado pela ajuda. Quase, quase que resolve.
Isto rebenta quando: - Os dias 26 e 27 correspondem ambos à semana 48 - Quando se colocam vários meses baralha-se todo
Para ver as semanas fui a este site: www.calendario-365.com.br/calend%C3%A1rio-2003.html
Alguma ajuda e obrigado a todos.
Cumps
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

*Este outro também pode ajudar* http://stackoverflow.com/questions/6970588/r-optimal-extraction-of-weekday-w... Em 25 de agosto de 2012 15:19, Leandro Marino < leandromarino@leandromarino.com.br> escreveu:
*Hugo,* * * *dê uma olhada neste topico...* * * https://stat.ethz.ch/pipermail/r-help/2003-December/043610.html
Em 25 de agosto de 2012 15:15, Hugo Sena <hugosena@gmail.com> escreveu:
@andrebvs<http://r-br.2285057.n4.nabble.com/template/NamlServlet.jtp?macro=user_nodes&user=373924>
Muito obrigado pela ajuda. Quase, quase que resolve.
Isto rebenta quando: - Os dias 26 e 27 correspondem ambos à semana 48 - Quando se colocam vários meses baralha-se todo
Para ver as semanas fui a este site: www.calendario-365.com.br/calend%C3%A1rio-2003.html
Alguma ajuda e obrigado a todos.
Cumps
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Hugo, Encontrei uma solução usando a cut(). Peguei uma lista enorme de domingos para usá-los como pontos de corte (breaks) na cut(). Pode não ser a forma mais eficiente, mas acho que é a mais simples até agora: tt = read.csv2('tt.csv') tt$DATA = as.Date(tt$DATA, '%d-%m-%Y') ### defini o domingo que inicia a primeira semana: primeiro.domingo = as.numeric( as.Date('2003-11-02') ) ### e um além do necessário pra não ter problemas: ultimo.domingo = as.numeric( as.Date('2012-08-26') ) ### fiz uma sequência de todos os domingos nesse intervalo domingos = seq( primeiro.domingo, ultimo.domingo, 7 ) ### e a usei como breaks na função cut() tt$semana = as.numeric( cut(as.numeric(tt$DATA), breaks = domingos, right=FALSE) ) ## as.numeric() porque cut() só funciona com vetores numéricos ## right=F para que os domingos iniciem a semana, ou seja, criar classes do tipo: [dom, sáb) ### aí finalmente vem o aggregate: aggregate(tt$QTD, tt['semana'], sum) # se tiver dúvida com relação ao as.numeric() em datas: as.numeric( as.Date('1970-01-01') ) as.numeric( as.Date('1970-01-02') ) as.numeric( as.Date('1970-01-03') ) Não testei muito aqui, vê aí se funciona no resto dos dados mesmo. Atenciosamente, Lucas Cusinato Em 25 de agosto de 2012 15:20, Leandro Marino < leandromarino@leandromarino.com.br> escreveu:
*Este outro também pode ajudar*
http://stackoverflow.com/questions/6970588/r-optimal-extraction-of-weekday-w...
Em 25 de agosto de 2012 15:19, Leandro Marino < leandromarino@leandromarino.com.br> escreveu:
*Hugo,*
* * *dê uma olhada neste topico...* * * https://stat.ethz.ch/pipermail/r-help/2003-December/043610.html
Em 25 de agosto de 2012 15:15, Hugo Sena <hugosena@gmail.com> escreveu:
@andrebvs<http://r-br.2285057.n4.nabble.com/template/NamlServlet.jtp?macro=user_nodes&user=373924>
Muito obrigado pela ajuda. Quase, quase que resolve.
Isto rebenta quando: - Os dias 26 e 27 correspondem ambos à semana 48 - Quando se colocam vários meses baralha-se todo
Para ver as semanas fui a este site: www.calendario-365.com.br/calend%C3%A1rio-2003.html
Alguma ajuda e obrigado a todos.
Cumps
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Fiz uma função mais geral: define.semana = function(datas, formato='%d-%m-%Y'){ datas = as.Date(datas, formato) minimo = min(datas) resto = as.numeric(minimo)%%7 if(resto==4) domingo.zero = minimo - 1 else if(resto==5) domingo.zero = minimo - 2 else if(resto==6) domingo.zero = minimo - 3 else if(resto==0) domingo.zero = minimo - 4 else if(resto==1) domingo.zero = minimo - 5 else if(resto==2) domingo.zero = minimo - 6 dom.alem = max(datas)+10 domingos = seq( domingo.zero, dom.alem, 7 ) as.numeric( cut( as.numeric(datas), breaks=domingos, right=F ) ) } tt = read.csv2('tt.csv') tt$semana = define.semana(tt$DATA) aggregate(tt$QTD, tt['semana'], sum) Em 25 de agosto de 2012 23:33, Lucas Cusinato <lucasbcr@gmail.com> escreveu:
Hugo,
Encontrei uma solução usando a cut(). Peguei uma lista enorme de domingos para usá-los como pontos de corte (breaks) na cut(). Pode não ser a forma mais eficiente, mas acho que é a mais simples até agora:
tt = read.csv2('tt.csv') tt$DATA = as.Date(tt$DATA, '%d-%m-%Y')
### defini o domingo que inicia a primeira semana: primeiro.domingo = as.numeric( as.Date('2003-11-02') )
### e um além do necessário pra não ter problemas: ultimo.domingo = as.numeric( as.Date('2012-08-26') )
### fiz uma sequência de todos os domingos nesse intervalo domingos = seq( primeiro.domingo, ultimo.domingo, 7 )
### e a usei como breaks na função cut() tt$semana = as.numeric( cut(as.numeric(tt$DATA), breaks = domingos, right=FALSE) ) ## as.numeric() porque cut() só funciona com vetores numéricos ## right=F para que os domingos iniciem a semana, ou seja, criar classes do tipo: [dom, sáb)
### aí finalmente vem o aggregate: aggregate(tt$QTD, tt['semana'], sum)
# se tiver dúvida com relação ao as.numeric() em datas: as.numeric( as.Date('1970-01-01') ) as.numeric( as.Date('1970-01-02') ) as.numeric( as.Date('1970-01-03') )
Não testei muito aqui, vê aí se funciona no resto dos dados mesmo.
Atenciosamente, Lucas Cusinato
Em 25 de agosto de 2012 15:20, Leandro Marino < leandromarino@leandromarino.com.br> escreveu:
*Este outro também pode ajudar*
http://stackoverflow.com/questions/6970588/r-optimal-extraction-of-weekday-w...
Em 25 de agosto de 2012 15:19, Leandro Marino < leandromarino@leandromarino.com.br> escreveu:
*Hugo,*
* * *dê uma olhada neste topico...* * * https://stat.ethz.ch/pipermail/r-help/2003-December/043610.html
Em 25 de agosto de 2012 15:15, Hugo Sena <hugosena@gmail.com> escreveu:
@andrebvs<http://r-br.2285057.n4.nabble.com/template/NamlServlet.jtp?macro=user_nodes&user=373924>
Muito obrigado pela ajuda. Quase, quase que resolve.
Isto rebenta quando: - Os dias 26 e 27 correspondem ambos à semana 48 - Quando se colocam vários meses baralha-se todo
Para ver as semanas fui a este site: www.calendario-365.com.br/calend%C3%A1rio-2003.html
Alguma ajuda e obrigado a todos.
Cumps
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

@Lucas Barbosa<http://r-br.2285057.n4.nabble.com/template/NamlServlet.jtp?macro=user_nodes&user=226554> Obrigado pela ajuda. Cumps.
participantes (4)
-
andrebvs
-
Hugo Sena
-
Leandro Marino
-
Lucas Cusinato