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.