
Prezados, Estou postando, por não ter conseguido encontrar a solução aqui na lista, a despeito de procurar... Tenho um banco de dados, alimentado diariamente, sendo uma das variáveis o dia de entrada (dd/mm/aaaa). Preciso extrair deste banco todas as entradas que se deram no período do carnaval... Como faço? Uso subset? Atenciosamente,

Olá Uma das alternativas é usar a função <month> da biblioteca {data.table} exemplo adaptado do site: http://stackoverflow.com/questions/17244077/select-subset-by-date-in-r#17246... library(data.table) ## dados n.child = as.numeric(c(1,2,3,4,5,6)) sex = as.factor(c("f","f","f","m","m","f")) date = as.Date(c("01/01/2002", "01/12/2002", "13/02/2003", "17/02/2003", "03/01/2004", "09/09/2004"), format="%d/%m/%Y") DF = data.frame(n.child, sex, date) ## ----- dataframe ----- fev = DF[month(DF$date) == 2,] fev ## ----- data.table ----- ## converte para "data.table" DT = data.table(DF) ## seleciona mes fevereiro, mes 2 fev = DT[month(date) == 2] fev ## converte para dataframe setDF(fev) fev o data.table é muito mais eficiente para manipulação de uma base de dados saudações

Salah, Suspeito que o uso da função month seja insuficiente para o Amiko (OP), posto que ele não especifica a faixa de anos que o banco de dados dele abarca, e por outro lado as datas do Carnaval são "feriados móveis". Ademais, como ele fala em "período de Carnaval", cuja definição é bastante frouxa (alguns contam a partir do "grito de carnaval" (sábado) outros contam apenas a segunda que antecede a terça de Carnaval, etc. Com isso ele teria que gerar uma tabela com todos os Carnavais do período compreendido entre a mínima e máxima data do banco de dados dele, e depois usar subset. Para *um* período, um exemplo pronto (admitindo que o costume desta lista não é violado ao postar exemplos do SO): http://stackoverflow.com/questions/22420487/subsetting-data-table-set-by-dat... Para achar os períodos de Carnaval para os vários anos eu recomendo uma leitura do manual do pacote timeDate, que permite encontrar as datas móveis (dica para os pesquisadores de Google para este caso: procurem pesquisar, se em inglês, por « Ash Wednesday » em vez de "Carnival", porque este último coincide com trocentos outros assuntos enquanto a quarta-feira de cinzas é menos ruidosa para pesquisa). HTH -- Cesar Rabak On Mon, Jan 23, 2017 at 3:19 PM, salah via R-br <r-br@listas.c3sl.ufpr.br> wrote:
Olá
Uma das alternativas é usar a função <month> da biblioteca {data.table}
exemplo adaptado do site:
http://stackoverflow.com/questions/17244077/select-subset- by-date-in-r#17246437
library(data.table)
## dados n.child = as.numeric(c(1,2,3,4,5,6)) sex = as.factor(c("f","f","f","m","m","f")) date = as.Date(c("01/01/2002", "01/12/2002", "13/02/2003", "17/02/2003", "03/01/2004", "09/09/2004"), format="%d/%m/%Y") DF = data.frame(n.child, sex, date)
## ----- dataframe ----- fev = DF[month(DF$date) == 2,] fev
## ----- data.table ----- ## converte para "data.table" DT = data.table(DF)
## seleciona mes fevereiro, mes 2 fev = DT[month(date) == 2] fev
## converte para dataframe setDF(fev) fev
o data.table é muito mais eficiente para manipulação de uma base de dados
saudações
_______________________________________________ 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 fornea cdigo mnimo reproduzvel.

Prezados, Muito obrigado pela ajuda. Meu banco de dados tem entrada em todos os dias de 2016. Assim, preciso criar um outro banco, a partir deste, cujo critério de extração sejam todas as linhas (da variável data de entrada) que contenham todos os dias referente ao carnaval 2016: 05/02/2016 a 10/02/2016, no meu caso... Em 23 de jan de 2017 16:41, "Cesar Rabak via R-br" <r-br@listas.c3sl.ufpr.br> escreveu:
Salah,
Suspeito que o uso da função month seja insuficiente para o Amiko (OP), posto que ele não especifica a faixa de anos que o banco de dados dele abarca, e por outro lado as datas do Carnaval são "feriados móveis".
Ademais, como ele fala em "período de Carnaval", cuja definição é bastante frouxa (alguns contam a partir do "grito de carnaval" (sábado) outros contam apenas a segunda que antecede a terça de Carnaval, etc.
Com isso ele teria que gerar uma tabela com todos os Carnavais do período compreendido entre a mínima e máxima data do banco de dados dele, e depois usar subset. Para *um* período, um exemplo pronto (admitindo que o costume desta lista não é violado ao postar exemplos do SO): http://stackoverflow.com/questions/22420487/subsetting- data-table-set-by-date-range-in-r
Para achar os períodos de Carnaval para os vários anos eu recomendo uma leitura do manual do pacote timeDate, que permite encontrar as datas móveis (dica para os pesquisadores de Google para este caso: procurem pesquisar, se em inglês, por « Ash Wednesday » em vez de "Carnival", porque este último coincide com trocentos outros assuntos enquanto a quarta-feira de cinzas é menos ruidosa para pesquisa).
HTH -- Cesar Rabak
On Mon, Jan 23, 2017 at 3:19 PM, salah via R-br <r-br@listas.c3sl.ufpr.br> wrote:
Olá
Uma das alternativas é usar a função <month> da biblioteca {data.table}
exemplo adaptado do site:
http://stackoverflow.com/questions/17244077/select-subset-by -date-in-r#17246437
library(data.table)
## dados n.child = as.numeric(c(1,2,3,4,5,6)) sex = as.factor(c("f","f","f","m","m","f")) date = as.Date(c("01/01/2002", "01/12/2002", "13/02/2003", "17/02/2003", "03/01/2004", "09/09/2004"), format="%d/%m/%Y") DF = data.frame(n.child, sex, date)
## ----- dataframe ----- fev = DF[month(DF$date) == 2,] fev
## ----- data.table ----- ## converte para "data.table" DT = data.table(DF)
## seleciona mes fevereiro, mes 2 fev = DT[month(date) == 2] fev
## converte para dataframe setDF(fev) fev
o data.table é muito mais eficiente para manipulação de uma base de dados
saudações
_______________________________________________ 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 fornea cdigo mnimo reproduzvel.
_______________________________________________ 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.

olá Bem correto seus comentários Cesar, não compreendi bem o problema. segue sugestão: data = seq(as.Date('2016-01-01'), as.Date('2016-12-31'), by = 1) DF = data.frame(data, N = 1:366) DF[DF$data > "2016-02-05" & DF$data < "2016-02-10",] ou subset(DF, data > "2016-02-05" & DF$data < "2016-02-10") saudações

Para verificar se uma data está contida num intervalo, tem o operador %within% do lubridate. Não entendi muito bem se era para lidar com dados de vários anos ou apenas do ano corrente, então o código abaixo funciona para vários anos. Também não sabia se você já tem a lista de datas de início e fim do carnaval, então fiz como se não a tivesse. Veja quais partes do código serão úteis. # ================================================================================ # Package for creation and validation of dates interval if( !require( lubridate ) ){ install.packages('lubridate'); library(lubridate); } # Data simulation dates <- seq( from = as.Date("2010-01-01"), to = as.Date("2017-12-31"), by = 1 ) # Carnival begin and finish dates carnivals <- data.frame( d0 = as.Date( timeDate::Easter( 2010:2017 ) )-51 , d1 = as.Date( timeDate::Easter( 2010:2017 ) )-46 ) # Checks which dates are within (%within% operand from lubridate package) carnivals intervals dates[ sapply( interval( carnivals$d0, carnivals$d1 ) , function( x ){ which( dates %within% x ) }) ] # ================================================================================ Abs, Karina On Mon, Jan 23, 2017 at 6:43 PM salah via R-br <r-br@listas.c3sl.ufpr.br> wrote:
olá
Bem correto seus comentários Cesar, não compreendi bem o problema.
segue sugestão:
data = seq(as.Date('2016-01-01'), as.Date('2016-12-31'), by = 1) DF = data.frame(data, N = 1:366)
DF[DF$data > "2016-02-05" & DF$data < "2016-02-10",]
ou
subset(DF, data > "2016-02-05" & DF$data < "2016-02-10")
saudações
_______________________________________________ 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 fornea cdigo mnimo reproduzvel.

Excelente exemplo Karina! Eu tinha esquecido do lubridate. . . não uso há anos, literalmente. Quanto ao exemplo do salah, a linha:
subset(DF, data > "2016-02-05" & DF$data < "2016-02-10")
pode ser (IMHNHO melhor):
subset(DF, data > "2016-02-05" & data < "2016-02-10")
Ademais, *acho* que o Amiko quer os dias do Carnaval *inclusive*, por isso, acho que a linha correta do subset seria:
subset(DF, data >= "2016-02-05" & data <= "2016-02-10")
HTH -- Cesar Rabak 2017-01-24 6:31 GMT-02:00 Karina Rebuli via R-br <r-br@listas.c3sl.ufpr.br>:
Para verificar se uma data está contida num intervalo, tem o operador %within% do lubridate.
Não entendi muito bem se era para lidar com dados de vários anos ou apenas do ano corrente, então o código abaixo funciona para vários anos. Também não sabia se você já tem a lista de datas de início e fim do carnaval, então fiz como se não a tivesse. Veja quais partes do código serão úteis.
# ============================================================ ====================
# Package for creation and validation of dates interval if( !require( lubridate ) ){ install.packages('lubridate'); library(lubridate); }
# Data simulation dates <- seq( from = as.Date("2010-01-01"), to = as.Date("2017-12-31"), by = 1 )
# Carnival begin and finish dates carnivals <- data.frame( d0 = as.Date( timeDate::Easter( 2010:2017 ) )-51 , d1 = as.Date( timeDate::Easter( 2010:2017 ) )-46 )
# Checks which dates are within (%within% operand from lubridate package) carnivals intervals dates[ sapply( interval( carnivals$d0, carnivals$d1 ) , function( x ){ which( dates %within% x ) }) ]
# ============================================================ ====================
Abs, Karina
On Mon, Jan 23, 2017 at 6:43 PM salah via R-br <r-br@listas.c3sl.ufpr.br> wrote:
olá
Bem correto seus comentários Cesar, não compreendi bem o problema.
segue sugestão:
data = seq(as.Date('2016-01-01'), as.Date('2016-12-31'), by = 1) DF = data.frame(data, N = 1:366)
DF[DF$data > "2016-02-05" & DF$data < "2016-02-10",]
ou
subset(DF, data > "2016-02-05" & DF$data < "2016-02-10")
saudações
_______________________________________________ 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 fornea cdigo mnimo reproduzvel.
_______________________________________________ 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.

Prezados, Resolvi, com o script proposto pelo Cesar. Muito obrigado e desculpem a confusão ao expor o problema. Em 24-01-2017 15:27, Cesar Rabak via R-br escreveu:
Ademais, _acho_ que o Amiko quer os dias do Carnaval _inclusive_, por isso, acho que a linha correta do subset seria:
subset(DF, data >= "2016-02-05" & data <= "2016-02-10")
HTH
participantes (5)
-
Amiko Bh
-
Amikobh
-
Cesar Rabak
-
Karina Rebuli
-
salah