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

Lucas Cusinato lucasbcr em gmail.com
Domingo Agosto 26 00:21:23 BRT 2012


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 em 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 em leandromarino.com.br> escreveu:
>
> *Este outro também pode ajudar*
>>
>> http://stackoverflow.com/questions/6970588/r-optimal-extraction-of-weekday-week-month-from-dates-for-memory-compactne
>>
>>
>>
>> Em 25 de agosto de 2012 15:19, Leandro Marino <
>> leandromarino em 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 em 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 em 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 em 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.
>>
>
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120826/48cf4012/attachment.html>


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