Operações com datas

Boa tarde pessoal, Tenho dados de temperatura e precipitação diárias de 1994 a 2001 em uma determinada fazenda. Preciso retira as médias do dia 1º ao 15º dia e do 15º ao último dia de cada mês, porém estou tendo problemas em trabalhar com as datas, exemplificando através de uma rotina venho fazendo: ### Criando o objeto com datas e a variável climática x <- as.Date("1994-01-01") times <- 1:2865 datas <- x+times datas<-as.data.frame(datas)##Cria o vetor data de 01/01/1994 a 5/11/2001 variavel<-rnorm(2865)## Simula a variável medida no dia dados<-cbind(datas,variavel)##Cria o objeto ## Cria um vetor temporal a cada 15 dias e adiciona aos dados t<-1:191 for(i in 1:length(t)){xv<-sort(rep(t,15))} xv<-as.data.frame(xv) xv<-xv[1:2865,] tp.1994_2001<-cbind(dados,xv) head(tp.1994_2001) ## Calcula as médias a cada 15 dias md<-1:2865 res<-NULL for(k in 1:length(md)){Tm<-mean(tp.1994_2001[md[k],2]) res<-rbind(res,c(md[k],Tm)) } Porém minha abordagem esta incorreta, quando na verdade eu desejo a média do 1° ao 15º dia e do 15º ao último dia do mês, e não a cada 15 dias, peguei alguns materiais de séries temporais usando o R, mas todos tratam diretamente das análises e não da manipulação de dados. Alguém saberia que abordagem eu poderia empregar para obter os resultados corretos ou alguma literatura que envolva a manipulação de datas, Obrigado -- Alexandre DOS SANTOS Engenheiro Florestal, Msc. Laboratório de Entomologia Florestal Departamento de Entomologia Universidade Federal de Lavras Caixa Postal 3037 37200-000 - Lavras - Minas Gerais - Brasil Tel: +55 35 92230304

Alexandre sem fornecer/testar código aqui vai uma sugestao de como eu faria há funcoes que manipulam datas que permitem voce extrair o dia do mes, portanto 1. criar nova variável (dia) com dia do mes 2. criar um fator (quanzena) dividindo os dias nos niveis quinzena <- factor(ifelse(dia >=1 & dia <=15, "Q1", "Q2") 3. fazer o que voce precisa cruzando precipitacao etc com a variável quinzena por exemplo tapply(precipitacao, quinzena, mean, na.rm=T) Em Ter, 2012-01-17 às 16:16 -0200, ASANTOS escreveu:
Boa tarde pessoal,
Tenho dados de temperatura e precipitação diárias de 1994 a 2001 em uma determinada fazenda. Preciso retira as médias do dia 1º ao 15º dia e do 15º ao último dia de cada mês, porém estou tendo problemas em trabalhar com as datas, exemplificando através de uma rotina venho fazendo:
### Criando o objeto com datas e a variável climática x <- as.Date("1994-01-01") times <- 1:2865 datas <- x+times datas<-as.data.frame(datas)##Cria o vetor data de 01/01/1994 a 5/11/2001 variavel<-rnorm(2865)## Simula a variável medida no dia dados<-cbind(datas,variavel)##Cria o objeto
## Cria um vetor temporal a cada 15 dias e adiciona aos dados t<-1:191 for(i in 1:length(t)){xv<-sort(rep(t,15))} xv<-as.data.frame(xv) xv<-xv[1:2865,] tp.1994_2001<-cbind(dados,xv) head(tp.1994_2001)
## Calcula as médias a cada 15 dias md<-1:2865 res<-NULL for(k in 1:length(md)){Tm<-mean(tp.1994_2001[md[k],2]) res<-rbind(res,c(md[k],Tm)) }
Porém minha abordagem esta incorreta, quando na verdade eu desejo a média do 1° ao 15º dia e do 15º ao último dia do mês, e não a cada 15 dias, peguei alguns materiais de séries temporais usando o R, mas todos tratam diretamente das análises e não da manipulação de dados. Alguém saberia que abordagem eu poderia empregar para obter os resultados corretos ou alguma literatura que envolva a manipulação de datas,
Obrigado
-- Paulo Justiniano Ribeiro Jr LEG (Laboratorio de Estatistica e Geoinformacao) Universidade Federal do Parana Caixa Postal 19.081 CEP 81.531-990 Curitiba, PR - Brasil Tel: (+55) 41 3361 3573 VOIP: (+55) (41) (3361 3600) 1053 1066 Fax: (+55) 41 3361 3141 e-mail: paulojus AT ufpr br http://www.leg.ufpr.br/~paulojus

Prof. Paulo, Funcionou muito obrigado. Segue solução: ### Criando o objeto com datas e a variável climática x <- as.Date("1994-01-01") times <- 1:2865 datas <- x+times dia<-as.POSIXlt(datas)$mday### Extrai os dias mes<-as.POSIXlt(datas)$mon +1### Extrai os meses ano<-as.POSIXlt(datas)$year + 1900### Extrai os anos datas<-as.data.frame(datas)##Cria o vetor data de 01/01/1994 a 5/11/2001 variavel<-rnorm(2865)## Simula a variável medida no dia dados<-cbind(datas,dia,mes,ano,variavel)##Cria o objeto quinzena <- factor(ifelse(dia >=1 & dia <=15, "Q1", "Q2"))##Crias os dois fatores dados<-cbind(datas,dia,mes,ano,quinzena,variavel)##Cria um novo objeto res<-aggregate(dados$variavel, by=list(dados$ano,dados$mes,dados$quinzena),mean)###Calcula a média para cada quinzena res2<-res[with(res, order(Group.1, Group.2)), ]## Ordenando os resultados Em 17-01-2012 16:41, Paulo J Ribeiro Jr escreveu:
Alexandre
sem fornecer/testar código aqui vai uma sugestao de como eu faria
há funcoes que manipulam datas que permitem voce extrair o dia do mes, portanto
1. criar nova variável (dia) com dia do mes 2. criar um fator (quanzena) dividindo os dias nos niveis quinzena<- factor(ifelse(dia>=1& dia<=15, "Q1", "Q2") 3. fazer o que voce precisa cruzando precipitacao etc com a variável quinzena
por exemplo tapply(precipitacao, quinzena, mean, na.rm=T)
Em Ter, 2012-01-17 às 16:16 -0200, ASANTOS escreveu:
Boa tarde pessoal,
Tenho dados de temperatura e precipitação diárias de 1994 a 2001 em uma determinada fazenda. Preciso retira as médias do dia 1º ao 15º dia e do 15º ao último dia de cada mês, porém estou tendo problemas em trabalhar com as datas, exemplificando através de uma rotina venho fazendo:
### Criando o objeto com datas e a variável climática x<- as.Date("1994-01-01") times<- 1:2865 datas<- x+times datas<-as.data.frame(datas)##Cria o vetor data de 01/01/1994 a 5/11/2001 variavel<-rnorm(2865)## Simula a variável medida no dia dados<-cbind(datas,variavel)##Cria o objeto
## Cria um vetor temporal a cada 15 dias e adiciona aos dados t<-1:191 for(i in 1:length(t)){xv<-sort(rep(t,15))} xv<-as.data.frame(xv) xv<-xv[1:2865,] tp.1994_2001<-cbind(dados,xv) head(tp.1994_2001)
## Calcula as médias a cada 15 dias md<-1:2865 res<-NULL for(k in 1:length(md)){Tm<-mean(tp.1994_2001[md[k],2]) res<-rbind(res,c(md[k],Tm)) }
Porém minha abordagem esta incorreta, quando na verdade eu desejo a média do 1° ao 15º dia e do 15º ao último dia do mês, e não a cada 15 dias, peguei alguns materiais de séries temporais usando o R, mas todos tratam diretamente das análises e não da manipulação de dados. Alguém saberia que abordagem eu poderia empregar para obter os resultados corretos ou alguma literatura que envolva a manipulação de datas,
Obrigado
-- Alexandre DOS SANTOS Engenheiro Florestal, Msc. Laboratório de Entomologia Florestal Departamento de Entomologia Universidade Federal de Lavras Caixa Postal 3037 37200-000 - Lavras - Minas Gerais - Brasil Tel: +55 35 92230304

Rubem e Walmes, Agradeço as soluções propostas, não sei qual o problema do servidor da UFLA com o Yahoo, mas existe um atraso no recebimento de alguns emails quando estou na universidade. Redobrados agradecimentos, Alexandre Em 17-01-2012 17:22, ASANTOS escreveu:
Prof. Paulo,
Funcionou muito obrigado. Segue solução:
### Criando o objeto com datas e a variável climática x <- as.Date("1994-01-01") times <- 1:2865 datas <- x+times
dia<-as.POSIXlt(datas)$mday### Extrai os dias mes<-as.POSIXlt(datas)$mon +1### Extrai os meses ano<-as.POSIXlt(datas)$year + 1900### Extrai os anos
datas<-as.data.frame(datas)##Cria o vetor data de 01/01/1994 a 5/11/2001 variavel<-rnorm(2865)## Simula a variável medida no dia dados<-cbind(datas,dia,mes,ano,variavel)##Cria o objeto
quinzena <- factor(ifelse(dia >=1 & dia <=15, "Q1", "Q2"))##Crias os dois fatores
dados<-cbind(datas,dia,mes,ano,quinzena,variavel)##Cria um novo objeto
res<-aggregate(dados$variavel, by=list(dados$ano,dados$mes,dados$quinzena),mean)###Calcula a média para cada quinzena
res2<-res[with(res, order(Group.1, Group.2)), ]## Ordenando os resultados
Em 17-01-2012 16:41, Paulo J Ribeiro Jr escreveu:
Alexandre
sem fornecer/testar código aqui vai uma sugestao de como eu faria
há funcoes que manipulam datas que permitem voce extrair o dia do mes, portanto
1. criar nova variável (dia) com dia do mes 2. criar um fator (quanzena) dividindo os dias nos niveis quinzena<- factor(ifelse(dia>=1& dia<=15, "Q1", "Q2") 3. fazer o que voce precisa cruzando precipitacao etc com a variável quinzena
por exemplo tapply(precipitacao, quinzena, mean, na.rm=T)
Em Ter, 2012-01-17 às 16:16 -0200, ASANTOS escreveu:
Boa tarde pessoal,
Tenho dados de temperatura e precipitação diárias de 1994 a 2001 em uma determinada fazenda. Preciso retira as médias do dia 1º ao 15º dia e do 15º ao último dia de cada mês, porém estou tendo problemas em trabalhar com as datas, exemplificando através de uma rotina venho fazendo:
### Criando o objeto com datas e a variável climática x<- as.Date("1994-01-01") times<- 1:2865 datas<- x+times datas<-as.data.frame(datas)##Cria o vetor data de 01/01/1994 a 5/11/2001 variavel<-rnorm(2865)## Simula a variável medida no dia dados<-cbind(datas,variavel)##Cria o objeto
## Cria um vetor temporal a cada 15 dias e adiciona aos dados t<-1:191 for(i in 1:length(t)){xv<-sort(rep(t,15))} xv<-as.data.frame(xv) xv<-xv[1:2865,] tp.1994_2001<-cbind(dados,xv) head(tp.1994_2001)
## Calcula as médias a cada 15 dias md<-1:2865 res<-NULL for(k in 1:length(md)){Tm<-mean(tp.1994_2001[md[k],2]) res<-rbind(res,c(md[k],Tm)) }
Porém minha abordagem esta incorreta, quando na verdade eu desejo a média do 1° ao 15º dia e do 15º ao último dia do mês, e não a cada 15 dias, peguei alguns materiais de séries temporais usando o R, mas todos tratam diretamente das análises e não da manipulação de dados. Alguém saberia que abordagem eu poderia empregar para obter os resultados corretos ou alguma literatura que envolva a manipulação de datas,
Obrigado
-- Alexandre DOS SANTOS Engenheiro Florestal, Msc. Laboratório de Entomologia Florestal Departamento de Entomologia Universidade Federal de Lavras Caixa Postal 3037 37200-000 - Lavras - Minas Gerais - Brasil Tel: +55 35 92230304

Gerar os intervalos e usar cut() com tapply() ### Criando o objeto com datas e a variável climática x <- as.Date("1994-01-01") times <- 1:2865 datas <- x+times datas <- as.data.frame(datas)##Cria o vetor data de 01/01/1994 a 5/11/2001 variavel <- rnorm(2865)## Simula a variável medida no dia dados <- cbind(datas,variavel)##Cria o objeto str(dados) # sequência do dia 1 de cada mês min(dados$data) max(dados$data) x1 <- seq(from=as.Date("1994-01-01"), to=as.Date("2001-11-30"), "month") str(x1) # sequência do dia 15 de cada mês x2 <- seq(as.Date("1994-01-15"), as.Date("2001-11-30"), "month") str(x2) # sequência de datas para corte x <- sort(c(x1,x2)) str(x) xx <- cut(dados$data, x) str(xx) tapply(dados$variavel, xx, length) tapply(dados$variavel, xx, mean) À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Alexandre, seria mais ou menos isso: dados$dia<-as.integer(format(dados$datas,"%d")) dados$dia<-factor(ifelse(dados$dia>=1 & dados$dia<=15,"Q1","Q2")) dados.1<-split(dados,format(dados$datas,"%y-%m"),drop=T) dados.2<-lapply(dados.1,function(x){ y<-aggregate(variavel~dia,FUN=mean,data=x) y$dia<-paste(substr(x$datas[1],1,7),"-",y$dia,sep="") return(y) }) dados.2<-do.call(rbind,dados.2) head(dados.2) ?? Att., Rubem ________________________________ De: ASANTOS <alexandresantosbr@yahoo.com.br> Para: r-br@listas.c3sl.ufpr.br Enviadas: Terça-feira, 17 de Janeiro de 2012 16:16 Assunto: [R-br] Operações com datas Boa tarde pessoal, Tenho dados de temperatura e precipitação diárias de 1994 a 2001 em uma determinada fazenda. Preciso retira as médias do dia 1º ao 15º dia e do 15º ao último dia de cada mês, porém estou tendo problemas em trabalhar com as datas, exemplificando através de uma rotina venho fazendo: ### Criando o objeto com datas e a variável climática x <- as.Date("1994-01-01") times <- 1:2865 datas <- x+times datas<-as.data.frame(datas)##Cria o vetor data de 01/01/1994 a 5/11/2001 variavel<-rnorm(2865)## Simula a variável medida no dia dados<-cbind(datas,variavel)##Cria o objeto ## Cria um vetor temporal a cada 15 dias e adiciona aos dados t<-1:191 for(i in 1:length(t)){xv<-sort(rep(t,15))} xv<-as.data.frame(xv) xv<-xv[1:2865,] tp.1994_2001<-cbind(dados,xv) head(tp.1994_2001) ## Calcula as médias a cada 15 dias md<-1:2865 res<-NULL for(k in 1:length(md)){Tm<-mean(tp.1994_2001[md[k],2]) res<-rbind(res,c(md[k],Tm)) } Porém minha abordagem esta incorreta, quando na verdade eu desejo a média do 1° ao 15º dia e do 15º ao último dia do mês, e não a cada 15 dias, peguei alguns materiais de séries temporais usando o R, mas todos tratam diretamente das análises e não da manipulação de dados. Alguém saberia que abordagem eu poderia empregar para obter os resultados corretos ou alguma literatura que envolva a manipulação de datas, Obrigado -- Alexandre DOS SANTOS Engenheiro Florestal, Msc. Laboratório de Entomologia Florestal Departamento de Entomologia Universidade Federal de Lavras Caixa Postal 3037 37200-000 - Lavras - Minas Gerais - Brasil Tel: +55 35 92230304 _______________________________________________ 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.
participantes (4)
-
ASANTOS
-
Paulo J Ribeiro Jr
-
Rubem Kaipper Ceratti
-
Walmes Zeviani