Experimente isso. (Aqui usamos text=Lines
para manter o exemplo independente, mas na realidade o substituiríamos pelo nome do arquivo.)
Lines <- "2009-01 12
2009-02 310
2009-03 2379
2009-04 234
2009-05 14
2009-08 1
2009-09 34
2009-10 2386"
library(zoo)
z <- read.zoo(text = Lines, FUN = as.yearmon)
plot(z)
O eixo X não é tão bonito com esses dados, mas se você tiver mais dados na realidade, pode estar tudo bem ou você pode usar o código para um eixo X sofisticado mostrado na seção de exemplos de ?plot.zoo
.
A série zoo,, z
que é criada acima tem um "yearmon"
índice de tempo e se parece com isto:
> z
Jan 2009 Feb 2009 Mar 2009 Apr 2009 May 2009 Aug 2009 Sep 2009 Oct 2009
12 310 2379 234 14 1 34 2386
"yearmon"
pode ser usado sozinho também:
> as.yearmon("2000-03")
[1] "Mar 2000"
Nota:
"yearmon"
os objetos de classe são classificados em ordem de calendário.
Isso representará os pontos mensais em intervalos igualmente espaçados, o que provavelmente é o desejado; no entanto, se fosse desejado para traçar os pontos em intervalos espaçados de forma desigual espaçados em proporção com o número de dias em cada mês, em seguida, converter o índice z
da "Date"
classe: time(z) <- as.Date(time(z))
.
as.Date(month, format='%Y-%m-01')
e obter o mesmo resultado. Isso "parece" preferível para mim, já que especificar a mesma data em cada mês tem mais a ver com o formato da data do que com a manipulação de strings, mas talvez isso seja um absurdo.> as.Date("2016-01", format="%Y-%m-01") # [1] NA
. Estou usando R 3.3.1A solução mais concisa se você precisa que as datas estejam no formato de data:
as.Date
fixará o primeiro dia de cada mês como um objeto anual para você.fonte
Você também pode conseguir isso com as funções
parse_date_time
oufast_strptime
dolubridate
pacote:A diferença entre os dois é que
parse_date_time
permite a especificação do formato do tipo lubrificado, enquantofast_strptime
requer a mesma especificação de formato questrptime
.Para especificar o fuso horário, você pode usar o
tz
parâmetro-:Quando você tem irregularidades em seus dados de data e hora, você pode usar o
truncated
parâmetro -para especificar quantas irregularidades são permitidas:Dados usados:
fonte
date
usandoparse_date_time
, há uma maneira de visualizá-lo em uma ordem diferente do que"2009-01-01 UTC"
usar olubridate
pacote? Eu preferiria ver o dia primeiro no meu conjunto de dados, por exemplo01-01-2009
.?format
; por exemplo:format(your_date, "%d-%m-%Y")
. Porém, há uma desvantagem nisso: você receberá um valor de caractere de volta e não um encontro.format
pelo motivo que você mencionou, pensei que poderia haver uma maneira de incorporar isso nolubridate
pacote, mas parece que não.Usando o pacote anytime :
fonte
anydate("2009-03")
se escolhe sempre o primeiro dia do mês.?strptime
: a string de entrada não precisa especificar a data completamente: assume-se que os segundos, minutos ou horas não especificados são zero e um ano, mês ou dia não especificado é o atual. (No entanto, se um mês for especificado, o dia desse mês deve ser especificado por% d ou% e, já que o dia atual do mês não precisa ser válido para o mês especificado.) Parece que a resposta do megatron contém uma parte semelhante de documentação deas.Date
.anytime('1870-01')
Na verdade, como foi mencionado acima (e em outro lugar no SO), para converter a string em uma data, você precisa de uma data específica do mês. Na
as.Date()
página do manual:Uma solução simples seria colar a data
"01"
em cada data e usástrptime()
-la para indicá-la como o primeiro dia daquele mês.Para aqueles que procuram um pouco mais de fundo sobre datas e horários de processamento em R:
Em R, os tempos usam
POSIXct
e asPOSIXlt
classes e as datas usam aDate
classe.As datas são armazenadas como o número de dias desde 1º de janeiro de 1970 e as horas são armazenadas como o número de segundos desde 1º de janeiro de 1970.
Então, por exemplo:
Para realizar operações em datas e horas:
E para processar datas, você pode usar
strptime()
(pegando emprestado esses exemplos da página do manual):fonte
Eu acho que a solução de @ben-rollert é uma boa solução.
Você só precisa ter cuidado se quiser usar esta solução em uma função dentro de um novo pacote.
Ao desenvolver pacotes, é recomendado usar a sintaxe
packagename::function_name()
(consulte http://kbroman.org/pkg_primer/pages/depends.html ).Neste caso, você deve usar a versão
as.Date()
definida pelazoo
biblioteca.Aqui está um exemplo :
Portanto, se você estiver desenvolvendo um pacote, a prática recomendada é usar:
fonte