[R-br] Numero de dias acima de um valor

Luis G. S. e Silva lgsilvaesilva em gmail.com
Segunda Dezembro 1 15:20:40 BRST 2014


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 <rcoster em gmail.com> 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 <jecogeo em gmail.com>
> :
>
> 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 <
>> lgsilvaesilva em gmail.com> 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 <marcosfs2006 em gmail.com>
>>> 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 <
>>>> jecogeo em gmail.com> 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
>>>>> R-br em 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.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Marcos F. Silva
>>>> http://sites.google.com/site/marcosfs2006
>>>>
>>>> _______________________________________________
>>>> R-br mailing list
>>>> R-br em 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.
>>>>
>>>
>>>
>>>
>>> --
>>> Luís Gustavo Silva e Silva
>>>  _______________________________________________
>>> R-br mailing list
>>> R-br em 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 em 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 em 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.
>



-- 
Luís Gustavo Silva e Silva
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20141201/dee5e951/attachment.html>


Mais detalhes sobre a lista de discussão R-br