[R-br] ISO8601 time duration

Tiago Fragoso fragoso2718 em gmail.com
Quinta Agosto 11 09:28:54 BRT 2016


Olá,

Se seu formato de tempo sempre terá o formato:

P<dias>DT<horas>H<minutos>M<segundos>S

com esses marcadores, uma expressão regular que captura esses números é
dada por

P(\d+)DT(\d+)H(\d+)M(\d+)S

salvo por alguma sutileza que te obrigue a escapar algum simbolo ai.
Imagino que uma função em R que transforma em minutos seria algo do tipo:

converteMinutos <- function(Codigo){
  componentes <- stringr::str_match(Codigo,"P(\\d+)DT(\\d+)H(\\d+)M(\\d+)S")
  componentes <- as.numeric(componentes[,2:5]) #primeiro elemento é a
string completa, subsequentes são os grupos de captura
  t_minutos <- componentes%*%c(24*60,  #minutos em um dia
                                                       60,     #minutos em
uma hora
                                                       1,      #minuto já
está na escala
                                                       1/60)   #segundos
  return(t_minutos)
}


2016-08-11 8:11 GMT-03:00 Raphael Saldanha via R-br <
r-br em listas.c3sl.ufpr.br>:

> Olá Cesar, obrigado pela dica!
>
> 2016-08-11 1:14 GMT-03:00 Cesar Rabak <cesar.rabak em gmail.com>:
>
>> Raphael,
>>
>> Essa funcionalidade está "estacionada" em um pedido de "feature request"
>> para um pacote R que cuida exatamente dessas coisas lubridate
>> <https://github.com/hadley/lubridate/issues/362>  desde dezembro de
>> 2015!
>>
>> O *parsing* de cadeias ISO 8601 não é trivial e é bem documentado em
>> *fora* de programação em diversas linguagens, por isso, a recomendação é
>> que você aproveite que existe a funcionalidade pronta em Python (teste-a
>> antes. . .) e converta as durações para um arquivo que você possa importar
>> no R e seguir daí.
>>
>> HTH
>> --
>> Cesar Rabak
>>
>>
>>
>> 2016-08-10 23:31 GMT-03:00 Raphael Saldanha via R-br <
>> r-br em listas.c3sl.ufpr.br>:
>>
>>> Olá pessoal,
>>>
>>> Preciso lidar com um formato da ISO8601 para duração de tempo. A string
>>> vem desta forma:
>>>
>>> x <- "P4DT21H36M43S"
>>>
>>> Onde P indica que é uma duração de tempo, 4D : quatro dias, T indica que
>>> a seguir vem informações sobre tempo em um dia, 21H : 21 horas, 36M : 36
>>> minutos e 43S : 43 segundos.
>>>
>>> Guia: https://www.w3.org/TR/xmlschema-2/#isoformats
>>>
>>> Preciso criar uma função para transformar isto em minutos. Até achei
>>> algo parecido em python (https://github.com/gweis/isod
>>> ate/blob/master/src/isodate/isoduration.py), mas não vi nada parecido
>>> para R.
>>>
>>> Alguém com mais experiência em expressões regulares pode me dar uma mão?
>>>
>>> Att,
>>>
>>> Raphael Saldanha
>>>
>>>
>>>
>>> _______________________________________________
>>> 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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20160811/c0951414/attachment.html>


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