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


Em 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.