
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.