La función round_date() devuelve floor_date en lugar de la fecha redondeada.
Usando un ejemplo de un problema relacionado: https://stackoverflow.com/questions/54241283/nearest-month-end-in-r/54241387#54241387
“`{r}
library(lubridate)
library(dplyr)
dt<-data.frame(orig_dt=as.Date(c("1997-04-01","1997-06-29")))
dt %>% mutate(round_dt=round_date(orig_dt, unit="month"),
modified_dt=round_date(orig_dt, unit="month")-days(1))
<pre><code><br />en una sesión obtengo correctamente las fechas redondeadas (R 4.0.0, Rcpp_1.0.4.6 cargado a través de un espacio de nombres)
“`{r}
orig_dt round_dt modified_dt
1 1997-04-01 1997-04-01 1997-03-31
2 1997-06-29 1997-07-01 1997-06-30
en otra sesión obtengo el piso en lugar de redondeo (máquina diferente, R 4.0.2, Rcpp no cargado a través de un espacio de nombres)
“`{r}
orig_dt round_dt modified_dt
1 1997-04-01 1997-04-01 1997-03-31
2 1997-06-29 1997-06-01 1997-05-31
<pre><code><br />Creo que podría estar relacionado con Rcpp, ya que anteriormente obtuve un mensaje de error
“`{r}
Error in C_valid_tz(tzone) (rscrpt.R#27): function ‘Rcpp_precious_remove’ not provided by package ‘Rcpp’
Show stack trace
Aunque ya no obtengo el error, los valores son diferentes y me pregunto por qué/cómo solucionarlo sin tener que hacer una reinstalación completa.
davy.ai
El problema presentado está relacionado con el comportamiento de la función
round_date
del paquetelubridate
en diferentes sesiones, lo que lleva a diferentes valores de salida para la columnamodified_dt
del marco de datosdt
. En una sesión, la función redondea correctamente las fechas al último día del mes más cercano, mientras que en otra sesión ‘trunca’ las fechas. Puede haber diferentes factores que contribuyan a este comportamiento, pero una posible causa es la versión del paqueteRcpp
utilizado.El mensaje de error mencionado en la publicación sugiere que puede haber habido un problema al cargar o utilizar el paquete
Rcpp
, que es una dependencia delubridate
y proporciona algunas funciones optimizadas para trabajar con fechas y horas. La funciónRcpp_precious_remove
es parte del paqueteRcpp
y puede utilizarse para eliminar objetos del entorno R de manera segura, pero parece que no se encontró en la sesión donde ocurrió el error. Esto podría indicar que hubo un problema con la instalación o configuración deRcpp
.Para abordar el problema de resultados inconsistentes en la función
round_date
, una posible solución sería actualizar o reinstalar los paqueteslubridate
yRcpp
a sus últimas versiones, o utilizar una versión diferente y más estable que se haya confirmado que funciona correctamente. También puede ser útil verificar cualquier otra dependencia o conflicto de paquetes que pueda afectar el comportamiento de las funciones utilizadas.En general, trabajar con datos de fecha y hora en R puede ser complejo y estar sujeto a diversos problemas y desafíos, pero el uso de las herramientas y enfoques adecuados puede hacerlo mucho más fácil y eficiente. El paquete
lubridate
proporciona una amplia gama de funciones útiles para manejar fechas y horas en R, y se puede combinar con otros paquetes y herramientas para crear flujos de trabajo poderosos de análisis y visualización de datos.