Olá Hugo, segue abaixo a rotina para seu problema:
# Seus dados "data_semana.txt":
DATA QTD
05/11/2003 1
11/11/2003 1
11/11/2003 1
11/11/2003 1
11/11/2003 1
11/11/2003 1
11/11/2003 1
20/11/2003 1
26/11/2003 1
27/11/2003 1
DF <- read.table("data_semana.txt",h=T)
attach(DF)
DF$DATA <- as.Date(DF$DATA, "%d/%m/%Y")
fmt <- function(x)
{
weeks <- function(x) as.numeric(x + 4) %/% 7 + 1
sprintf("%s %02d", format(x, "%d/%m/%Y"), weeks(x) - weeks(x[1]) + 1)
}
library(zoo)
Resultado <- data.frame(aggregate(zoo(DF$QTD),fmt(DF$DATA),sum))
colnames(Resultado) <- c("QTD")
ndt <- nrow(Resultado) # número de datas
Semana <- rep(0,ndt)
Dia <- rep(0,ndt)
Mes <- rep(0,ndt)
Ano <- rep(0,ndt)
Qtd <- rep(0,ndt)
for (i in 1:ndt)
{
df <- rownames(Resultado)[i]
sep0 <- unlist(strsplit(df, " "))[1]
Dia[[i]] <- as.numeric(unlist(strsplit(sep0, "/")))[1]
Mes[[i]] <- as.numeric(unlist(strsplit(sep0, "/")))[2]
Ano[[i]] <- as.numeric(unlist(strsplit(sep0, "/")))[3]
Qtd[[i]] <- Resultado
[[1]][i]
Semana[i] <- Mes[i]*4+i
}
cbind(Semana,Dia,Mes,Ano,Qtd)
# Saída:
Semana Dia Mes Ano Qtd
[1,] 45 5 11 2003 1
[2,] 46 11 11 2003 6
[3,] 47 20 11 2003 1
[4,] 48 26 11 2003 1
[5,] 49 27 11 2003 1
Espero ter contribuído!
Acredito que os colegas aqui, podem melhorar esse script!
Att.
André Barbosa Ventura da Silva
Em 18/08/2012 14:53, Leandro Marino < leandromarino@leandromarino.com.br > escreveu:
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.