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)
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')Não testei muito aqui, vê aí se funciona no resto dos dados mesmo.
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') )
Atenciosamente,
Lucas CusinatoEm 25 de agosto de 2012 15:20, Leandro Marino <leandromarino@leandromarino.com.br> escreveu:
Este outro também pode ajudarEm 25 de agosto de 2012 15:19, Leandro Marino <leandromarino@leandromarino.com.br> escreveu:
Hugo,
dê uma olhada neste topico...
Em 25 de agosto de 2012 15:15, Hugo Sena <hugosena@gmail.com> escreveu:@andrebvs
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.