ggplot - r plot scale
Genera una secuencia del último día del mes durante dos años (2)
Es sorprendente cómo escribir una pregunta enfoca la energía creativa. Creo que resolví la respuesta. También puedo publicarlo aquí para la próxima alma pobre que se encuentra perdiendo el tiempo.
ymd("2010-02-01")+ months(0:23)-days(1)
Simplemente especifique el primer día del próximo mes y genere una secuencia de eso, pero reste 1 día de eso para obtener el último día del mes anterior.
[1] "2010-01-31 UTC" "2010-02-28 UTC" "2010-03-31 UTC" "2010-04-30 UTC" "2010-05-31 UTC" "2010-06-30 UTC" "2010-07-31 UTC" "2010-08-31 UTC" "2010-09-30 UTC"
[10] "2010-10-31 UTC" "2010-11-30 UTC" "2010-12-31 UTC" "2011-01-31 UTC" "2011-02-28 UTC" "2011-03-31 UTC" "2011-04-30 UTC" "2011-05-31 UTC" "2011-06-30 UTC"
[19] "2011-07-31 UTC" "2011-08-31 UTC" "2011-09-30 UTC" "2011-10-31 UTC" "2011-11-30 UTC" "2011-12-31 UTC"
Por cierto, ¿cómo me deshago de las molestas designaciones "UTC"? Las zonas horarias son un salvavidas cuando se necesitan. El resto del tiempo son una molestia.
Uso lubridate y pensé que esto sería tan fácil
ymd("2010-01-31")+months(0:23)
Pero mira lo que se obtiene. ¡Está todo en mal estado!
[1] "2010-01-31 UTC" "2010-03-03 UTC" "2010-03-31 UTC" "2010-05-01 UTC" "2010-05-31 UTC" "2010-07-01 UTC" "2010-07-31 UTC" "2010-08-31 UTC" "2010-10-01 UTC"
[10] "2010-10-31 UTC" "2010-12-01 UTC" "2010-12-31 UTC" "2011-01-31 UTC" "2011-03-03 UTC" "2011-03-31 UTC" "2011-05-01 UTC" "2011-05-31 UTC" "2011-07-01 UTC"
[19] "2011-07-31 UTC" "2011-08-31 UTC" "2011-10-01 UTC" "2011-10-31 UTC" "2011-12-01 UTC" "2011-12-31 UTC"
Luego leo cómo lubricar abastece a fenómenos tales como intervalo, duración y período. Entonces, bien, me doy cuenta de que un mes es realmente el número de días definidos por (365 * 4 + 1) / 48 = 30.438 días. Así que traté de ser inteligente y reescribirlo como
ymd("2010-01-31")+ as.period(months(0:23))
Pero eso solo dio un error.
Error in as.period.default(months(0:23)) : (list) object cannot be coerced to type ''double''
Sí, encontraste el truco correcto: retroceder un día desde el primero del mes siguiente .
Aquí está como un trazador de líneas en la base R:
R> seq(as.Date("2010-02-01"), length=24, by="1 month") - 1
[1] "2010-01-31" "2010-02-28" "2010-03-31" "2010-04-30" "2010-05-31"
[6] "2010-06-30" "2010-07-31" "2010-08-31" "2010-09-30" "2010-10-31"
[11] "2010-11-30" "2010-12-31" "2011-01-31" "2011-02-28" "2011-03-31"
[16] "2011-04-30" "2011-05-31" "2011-06-30" "2011-07-31" "2011-08-31"
[21] "2011-09-30" "2011-10-31" "2011-11-30" "2011-12-31"
R>
Por lo tanto, no es necesario lubridate que (aunque es un buen paquete) no es necesario para una tarea sencilla como esta. Además, su sobrecarga de funciones base existentes todavía me parece algo peligroso ...