Prueba esto. (Aquí usamos text=Linespara mantener el ejemplo autocontenido, pero en realidad lo reemplazaríamos con el nombre del archivo).
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)
El eje X no es tan bonito con estos datos, pero si tiene más datos en realidad podría estar bien o puede usar el código para un eje X elegante que se muestra en la sección de ejemplos de ?plot.zoo.
La serie del zoológico z, que se creó arriba, tiene un "yearmon"índice de tiempo y se ve así:
> 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" también se puede utilizar solo:
> as.yearmon("2000-03")
[1] "Mar 2000"
Nota:
- "yearmon"los objetos de clase se clasifican en orden de calendario.
 
- Esto trazará los puntos mensuales a intervalos igualmente espaciados que es probablemente lo que se desea; sin embargo, si se deseara para trazar los puntos a intervalos espaciados desigualmente espaciadas en proporción al número de días de cada mes a continuación, convertir el índice de - za- "Date"clase:- time(z) <- as.Date(time(z)).
 
 
                
as.Date(month, format='%Y-%m-01')y lograr el mismo resultado. Esto me "parece" preferible, ya que especificar la misma fecha en cada mes tiene más que ver con el formato de la fecha que con la manipulación de cadenas, pero tal vez eso sea una tontería.> as.Date("2016-01", format="%Y-%m-01") # [1] NA. Estoy usando R 3.3.1La solución más concisa si necesita que las fechas estén en formato de fecha:
library(zoo) month <- "2000-03" as.Date(as.yearmon(month)) [1] "2000-03-01"as.Datefijará el primer día de cada mes en un objeto yearmon para usted.fuente
También puede lograr esto con las funciones
parse_date_timeofast_strptimedellubridatepaquete:> parse_date_time(dates1, "ym") [1] "2009-01-01 UTC" "2009-02-01 UTC" "2009-03-01 UTC" > fast_strptime(dates1, "%Y-%m") [1] "2009-01-01 UTC" "2009-02-01 UTC" "2009-03-01 UTC"La diferencia entre esos dos es que
parse_date_timepermite la especificación de formato de estilo lubridate, mientras quefast_strptimerequiere la misma especificación de formato questrptime.Para especificar la zona horaria, puede utilizar el
tzparámetro -parámetro:> parse_date_time(dates1, "ym", tz = "CET") [1] "2009-01-01 CET" "2009-02-01 CET" "2009-03-01 CET"Cuando tiene irregularidades en sus datos de fecha y hora, puede usar el
truncatedparámetro -para especificar cuántas irregularidades están permitidas:> parse_date_time(dates2, "ymdHMS", truncated = 3) [1] "2012-06-01 12:23:00 UTC" "2012-06-01 12:00:00 UTC" "2012-06-01 00:00:00 UTC"Datos usados:
dates1 <- c("2009-01","2009-02","2009-03") dates2 <- c("2012-06-01 12:23","2012-06-01 12",'2012-06-01")fuente
dateusandoparse_date_time, ¿hay alguna manera de verla en un orden diferente al"2009-01-01 UTC"usandolubridatepackage? Preferiría ver el día primero en mi conjunto de datos, por ejemplo01-01-2009.?format; por ejemplo:format(your_date, "%d-%m-%Y"). Sin embargo, esto tiene una desventaja: obtendrás el valor de un personaje y no una fecha.formatpor la razón que mencionas, pensé que podría haber una forma de incorporar esto en ellubridatepaquete, pero parece que no la hay.Usando el paquete en cualquier momento :
library(anytime) anydate("2009-01") # [1] "2009-01-01"fuente
anydate("2009-03")si siempre se elige el primer día del mes.?strptime: la cadena de entrada no necesita especificar la fecha completamente: se asume que los segundos, minutos u horas no especificados son cero, y un año, mes o día no especificado es el actual. (Sin embargo, si se especifica un mes, el día de ese mes tiene que ser especificado por% d o% e ya que el día actual del mes no necesita ser válido para el mes especificado). Parece que la respuesta de megatron contiene una pieza similar de documentación deas.Date.anytime('1870-01')De hecho, como se mencionó anteriormente (y en otras partes de SO), para convertir la cadena en una fecha, necesita una fecha específica del mes. Desde la
as.Date()página del manual:Una solución simple sería pegar la fecha
"01"en cada fecha y usarlastrptime()para indicarla como el primer día de ese mes.Para aquellos que buscan un poco más de información sobre el procesamiento de fechas y horas en R:
En R, los tiempos usan
POSIXcty lasPOSIXltclases y las fechas usan laDateclase.Las fechas se almacenan como el número de días desde el 1 de enero de 1970 y las horas se almacenan como el número de segundos desde el 1 de enero de 1970.
Así por ejemplo:
d <- as.Date("1971-01-01") unclass(d) # one year after 1970-01-01 # [1] 365 pct <- Sys.time() # in POSIXct unclass(pct) # number of seconds since 1970-01-01 # [1] 1450276559 plt <- as.POSIXlt(pct) up <- unclass(plt) # up is now a list containing the components of time names(up) # [1] "sec" "min" "hour" "mday" "mon" "year" "wday" "yday" "isdst" "zone" # [11] "gmtoff" up$hour # [1] 9Para realizar operaciones en fechas y horas:
plt - as.POSIXlt(d) # Time difference of 16420.61 daysY para procesar fechas, puede usar
strptime()(tomando prestados estos ejemplos de la página del manual):strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS") # [1] "2006-02-20 11:16:16 EST" # And in vectorized form: dates <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960") strptime(dates, "%d%b%Y") # [1] "1960-01-01 EST" "1960-01-02 EST" "1960-03-31 EST" "1960-07-30 EDT"fuente
Creo que la solución de @ ben-rollert es una buena solución.
Solo debe tener cuidado si desea utilizar esta solución en una función dentro de un nuevo paquete.
Al desarrollar paquetes, se recomienda utilizar la sintaxis
packagename::function_name()(consulte http://kbroman.org/pkg_primer/pages/depends.html ).En este caso, debe utilizar la versión de
as.Date()definida por elzoobiblioteca.Aquí hay un ejemplo :
> devtools::session_info() Session info ---------------------------------------------------------------------------------------------------------------------------------------------------- setting value version R version 3.3.1 (2016-06-21) system x86_64, linux-gnu ui RStudio (1.0.35) language (EN) collate C tz <NA> date 2016-11-09 Packages -------------------------------------------------------------------------------------------------------------------------------------------------------- package * version date source devtools 1.12.0 2016-06-24 CRAN (R 3.3.1) digest 0.6.10 2016-08-02 CRAN (R 3.2.3) memoise 1.0.0 2016-01-29 CRAN (R 3.2.3) withr 1.0.2 2016-06-20 CRAN (R 3.2.3) > as.Date(zoo::as.yearmon("1989-10", "%Y-%m")) Error in as.Date.default(zoo::as.yearmon("1989-10", "%Y-%m")) : do not know how to convert 'zoo::as.yearmon("1989-10", "%Y-%m")' to class “Date” > zoo::as.Date(zoo::as.yearmon("1989-10", "%Y-%m")) [1] "1989-10-01"Entonces, si está desarrollando un paquete, la buena práctica es usar:
zoo::as.Date(zoo::as.yearmon("1989-10", "%Y-%m"))fuente