A função rle() é a função que faltava... e eu tentando reinventar a roda... :)
Abs. Em 1 de dezembro de 2014 15:20, Luis G. S. e Silva <[email protected]> escreveu: > Jefferson, > > A função movsum é uma soma móvel, com janela de tamanho 45. Segue um > pequeno exemplo dela: > > movsum(rep(1, 20), 5) > [1] NA NA NA NA 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 > > Caso fosse uma média móvel o resultado seria 1 ao invés de 5. > > filter(1:9, rep(1, 3), sides = 1) > [1] NA NA 6 9 12 15 18 21 24 > > Note que estamos fazendo uma soma acumulada em janelas de tamanho 3. Como > as duas primeiras posições não formam uma janela de tamanho 3 é atribuído > NA para elas. > > 1+2+3 = 6 > 2+3+4 = 9 > ... > > Na minha resposta anteriormente eu esqueci de modificar a função, ele > deveria ser definida com n=45 > > movsum <- function(x,n=45){filter(x,rep(1,n), sides=1)} > > Espero ter ajudado. > > Um abraço > > > Em 1 de dezembro de 2014 14:57, Rodrigo Coster <[email protected]> > escreveu: > > Jefferson, >> >> Talvez a função rle() possa te ajudar a resolver isso. Segue um exemplo: >> >> set.seed(12345) >> dados <- cumsum(rnorm(10000, 0, 10)) >> >> analise <- rle(dados > 100) >> inicio <- cumsum(analise$length) - analise$length + 1 >> >> resultado <- data.frame(inicio = inicio, valor = analise$values, seguidos >> = analise$length) >> subset(resultado, valor == TRUE & seguidos > 45) >> >> >> 2014-12-01 14:33 GMT-02:00 Jefferson Ferreira-Ferreira <[email protected] >> >: >> >> Marcos e Luis, muito obrigado pelas respostas. >>> >>> No entanto, Luis, fiquei com uma dúvida na tua solução. Se puderes me >>> ajudar te agradeço. >>> >>> A função que sugerisse movsum <- function(x,n=5){filter(x,rep(1,n), >>> sides=1)}, se entendi bem, é uma média móvel, certo? Estou com um pouco de >>> dificuldades de entender o que essa função faz. Tu Poderias me explicar >>> cada elemento dessa função, por favor? >>> >>> Caso ela seja uma média móvel, eu de fato, não sei se seria a saída. >>> >>> Vou colocar em termos simples meu objetivo. >>> >>> inicio.enchente <- min(dados$diajuliano[which(dados$Nivel > 2 *por 45 >>> dias consecutivos* )]) >>> >>> Ou seja, o que determinara o dia juliano em que começa minhe enchente é >>> um nível d'água maior que 2cm por 45 dias consecutivos. E é justamente >>> nesse trecho em negrito que estou me debatendo. Sinceramente, acho que a >>> saída não seria uma média móvel. >>> >>> O que acham?? >>> >>> Abraços! >>> >>> >>> >>> >>> >>> Em Mon Dec 01 2014 at 10:16:04, Luis G. S. e Silva < >>> [email protected]> escreveu: >>> >>> require(dplyr) >>>> movsum <- function(x,n=5){filter(x,rep(1,n), sides=1)} >>>> >>>> dados <- read.csv2('dado.csv') >>>> dados$Nivel <- as.numeric(as.character(xx$Nivel)) >>>> >>>> dadosNovo <- tbl_df(dados) %>% >>>> group_by(Date) %>% >>>> summarise(NivelMax = max(Nivel, na.rm=TRUE)) %>% >>>> mutate(Ind = as.numeric(NivelMax > 2)) %>% >>>> arrange(as.Date(Date, "%d/%m/%Y")) %>% >>>> mutate(DiasEnchente = movsum(Ind)) >>>> >>>> Em 30 de novembro de 2014 13:10, Marcos Silva <[email protected]> >>>> escreveu: >>>> >>>> Ainda não achei uma solução. Mas, caso eu tenha entendido o problema >>>>> corretamente, cheguei até aqui: >>>>> >>>>> library(dplyr) >>>>> setwd("E:\\") >>>>> dados <- read.csv2("dado.csv") >>>>> dados$Nivel <- as.numeric(as.character(dados$Nivel)) >>>>> >>>>> dadosNovo <- tbl_df(dados) %>% >>>>> group_by(Date) %>% >>>>> summarise(NivelMax = max(Nivel, na.rm=TRUE)) %>% >>>>> mutate(Ind = ifelse(NivelMax > 2, 1, 0)) %>% >>>>> arrange(as.Date(Date, "%d/%m/%Y")) >>>>> >>>>> > head(dadosNovo, 3) >>>>> Source: local data frame [3 x 3] >>>>> >>>>> Date NivelMax Ind >>>>> 1 01/02/2014 1.04 0 >>>>> 2 02/02/2014 1.04 0 >>>>> 3 03/02/2014 1.04 0 >>>>> >>>>> A estratégia até até aqui foi: construir um novo data frame com o >>>>> nível máximo em cada dia. Criar uma nova coluna com uma variável >>>>> indicadora >>>>> que recebe o valor 1 se o nível no dia é maior que 2.Fiz isso imaginando >>>>> que poderia ser tranquilo contar as sequencias de 1, mas isso se mostrou >>>>> não trivial. Bem, pelo menos eu não consegui ainda vislumbrar uma forma de >>>>> fazer isso. >>>>> >>>>> Bem, pode ser que alguem tenha uma forma de fazer isso... e >>>>> identificar os ínícios das enchentes... >>>>> >>>>> Caso eu consiga avançar, volto aqui. >>>>> >>>>> Abs. >>>>> >>>>> >>>>> >>>>> Em 28 de novembro de 2014 17:45, Jefferson Ferreira-Ferreira < >>>>> [email protected]> escreveu: >>>>> >>>>>> Olá amigos!! >>>>>> >>>>>> Estou com uma questão que não estou sabendo como resolver. Eu tenho >>>>>> uma série de dados de nivel d'água (3 vezes por dia). O que eu quero >>>>>> saber >>>>>> é em qual data começa a enchente. Como o nível sofre algumas "pequenas >>>>>> enchentes" que de fato não representam o real início da enchente, o que >>>>>> eu >>>>>> preciso é saber em qual data começa o seguinte evento: nível > 2cm por 45 >>>>>> dias consecutivos. Isso porque se o nível permanecer por menos de 45 dias >>>>>> consecutivos acima de 2cm eu não estou considerando isso como o início da >>>>>> enchente, mas como uma subida intermitente da água. Outro complicador é >>>>>> que >>>>>> preciso saber essa informação para cada um dos 10 equipamento >>>>>> (datalogger), >>>>>> discriminado na culona que chamei de logger. Ou seja, a data (em dia >>>>>> juliano) do início da enchente para cada logger. >>>>>> >>>>>> Em anexo envio os dados de apenas um dos meus aparelhos (logger == 1) >>>>>> >>>>>> Alguma ideia? >>>>>> >>>>>> _______________________________________________ >>>>>> R-br mailing list >>>>>> [email protected] >>>>>> 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. >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Marcos F. Silva >>>>> http://sites.google.com/site/marcosfs2006 >>>>> >>>>> _______________________________________________ >>>>> R-br mailing list >>>>> [email protected] >>>>> 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. >>>>> >>>> >>>> >>>> >>>> -- >>>> Luís Gustavo Silva e Silva >>>> _______________________________________________ >>>> R-br mailing list >>>> [email protected] >>>> 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 >>> [email protected] >>> 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 >> [email protected] >> 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. >> > > > > -- > Luís Gustavo Silva e Silva > > _______________________________________________ > R-br mailing list > [email protected] > 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. > -- Marcos F. Silva http://sites.google.com/site/marcosfs2006
_______________________________________________ R-br mailing list [email protected] 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.
