Saltar al contenido

Formatear Fecha a Año-Mes en R

Te sugerimos que pruebes esta resolución en un ambiente controlado antes de enviarlo a producción, saludos.

lubridate solo maneja fechas, y las fechas tienen días. Sin embargo, como menciona Alistaire, puede plantarlos por mes en que desea trabajar mensualmente:

library(tidyverse)

df_month <-
  df %>%
  mutate(Date = floor_date(as_date(Date), "month"))

Si, por ejemplo, desea agregar por mes, simplemente group_by() y summarize().

df_month %>%
  group_by(Date) %>%
  summarize(N = sum(N)) %>%
  ungroup()

#> # A tibble: 4 x 2
#>  Date           N
#>       
#>1 2017-01-01    59
#>2 2018-01-01    20
#>3 2018-02-01    33
#>4 2018-03-01    45

Puedes resolver esto con la función zoo::as.yearmon(). Sigue la solución:

library(tidyquant)
library(magrittr) 
library(dplyr)

df <- data.frame(Date=c("2017-01-01","2017-01-02","2017-01-03","2017-01-04",
                  "2018-01-01","2018-01-02","2018-02-01","2018-03-02"),
           N=c(24,10,13,12,10,10,33,45))
df %<>% mutate(Date = zoo::as.yearmon(Date))

Puedes usar cut función y uso breaks="month" para transformar todos tus días en tus fechas al primer día del mes. Entonces, cualquier fecha dentro del mismo mes tendrá la misma fecha en la nueva columna creada.

Esto es útil para agrupar todas las demás variables en su marco de datos por mes (esencialmente lo que está tratando de hacer). Sin embargo cut creará un factor, pero esto se puede volver a convertir en una fecha. Por lo tanto, aún puede tener la clase de fecha en su marco de datos.

Simplemente no puedes deshacerte del día en una fecha (porque entonces, no es una fecha…). Luego puede crear un buen formato para ejes o tablas. Por ejemplo:

true_date <-
  as.POSIXlt(
    c(
      "2017-01-01",
      "2017-01-02",
      "2017-01-03",
      "2017-01-04",
      "2018-01-01",
      "2018-01-02",
      "2018-02-01",
      "2018-03-02"
    ),
    format = "%F"
  )

df <-
  data.frame(
    Date = cut(true_date, breaks = "month"),
    N = c(24, 10, 13, 12, 10, 10, 33, 45)
  )

## here df$Date is a 'factor'. You could use substr to create a formated column
df$formated_date <- substr(df$Date, start = 1, stop = 7)

## and you can convert back to date class. format = "%F", is ISO 8601 standard date format

df$true_date <- strptime(x = as.character(df$Date), format = "%F")

str(df)

Si te ha sido útil este post, te agradeceríamos que lo compartas con otros desarrolladores de esta manera nos ayudas a dar difusión a nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *