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

Marcos Silva marcosfs2006 em gmail.com
Segunda Dezembro 1 17:15:25 BRST 2014


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 <lgsilvaesilva em gmail.com>
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 <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
>
> _______________________________________________
> 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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20141201/689fd701/attachment.html>


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