Después de de una prolongada recopilación de datos dimos con la solución esta pregunta que suelen tener ciertos usuarios. Te brindamos la solución y nuestro deseo es serte de gran ayuda.
Solución:
Hay un timeFormat
función dentro de la sliderInput
. Para obtener más información, visite Widget de entrada de control deslizante.
EDITAR:
Para obtener las fechas y usarlas más adelante en su análisis, se le debe mucho crédito a esta pregunta Primer día del mes de una fecha y hora POSIXct usando lubridate y la función provista por Roland.
rm(list=ls())
library(shiny)
monthStart <- function(x)
x <- as.POSIXlt(x)
x$mday <- 1
as.Date(x)
ui <- basicPage(sliderInput("slider", "Time", min = as.Date("2010-01-01"),max =as.Date("2014-12-01"),value=as.Date("2014-12-01"),timeFormat="%b %Y"),
textOutput("SliderText")
)
server <- shinyServer(function(input, output, session)
sliderMonth <- reactiveValues()
observe(
full.date <- as.POSIXct(input$slider, tz="GMT")
sliderMonth$Month <- as.character(monthStart(full.date))
)
output$SliderText <- renderText(sliderMonth$Month)
)
shinyApp(ui = ui, server = server)
Esta es una solución que uso, pero primero me gustaría explicar la lógica:
- Como se ha mencionado más arriba,
timeFormat
argumento de lasliderInput()
La función no proporciona la funcionalidad de paso de 1 mes requerida. En cambio, simplemente formatea los datos diarios subyacentes, por lo que los pasos permanecen intactos en un incremento diario. sliderInput()
tiene otro argumentostep
que se puede utilizar para definir explícitamente el incremento escalonado. Sin embargo, requiere un solo entero como entrada y, por lo tanto, no acepta vectores/rango. Dado que los meses tienen diferentes duraciones, no es correcto usar un solo número entero aquí. traté de usarlubridate::months(1)
ylubridate::period(1, units = "months")
-- fue en vano, lamentablemente, ya que ambos se convirtieron automáticamente a un número entero de 30 una vez que la aplicación los representó, por lo tanto, los incrementos mensuales no se mantuvieron.
Encontré una solución con shinyWidgets::sliderTextInput()
que crea un control deslizante de caracteres.
Suponiendo que sus fechas se almacenan como yyyy-mm-dd
fechas en columna Date
de mesa d
:
sliderTextInput(
inputId = "myID",
label = "myLabel",
choices = as.yearmon(unique(d$Date)),
selected = c(as.yearmon(min(d$Date)), as.yearmon(max(d$Date))),
grid = TRUE,
width = "100%"
)
Con esto usted siempre paso a incrementos mensuales. as.yearmon()
se usa para que su aplicación muestre etiquetas deslizantes en el MMM YYYY
formato.
Tenga en cuenta que la salida del control deslizante es un carácter, por lo que debe volver a transformarse en fecha:
as.Date(as.yearmon(input$myID[1]))
para comenzaras.Date(as.yearmon(input$myID[2]))
para un final
Sección de Reseñas y Valoraciones
Acuérdate de que te brindamos la opción de explicar si te ayudó.