首页 > 解决方案 > 将带有时区对象的日期时间传递给闪亮仪表板中的日期范围输入

问题描述

我在下面有一个闪亮的仪表板,dateRange()其中有一个我想通过时区传递日期时间的输入。但是,当我尝试将我的 datetime 对象转换为我得到的因子后将它们转换为日期时NAs。我该如何继续?

require(lubridate)
require(dplyr)

df = data.frame(timestring = c("2015-12-12 13:34:56", "2015-12-14 16:23:32"),
                localzone = c("America/Los_Angeles", "America/New_York"), stringsAsFactors = F)

df$moment = as.POSIXct(df$timestring, format="%Y-%m-%d %H:%M:%S", tz="UTC")

df = df %>% rowwise() %>% mutate(localtime = force_tz(moment, localzone))

df

df$localtime <- factor(df$localtime)

df$localtime<- as.Date(df$localtime, format = "%Y/%m/%d")

## app.R ##
library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    dateRangeInput('dateRange',
                   label = 'Date range input: yyyy-mm-dd',
                   start = df$localtime - 2, end = df$localtime + 2
    )
  ),
  dashboardBody()
)

server <- function(input, output) {


}

shinyApp(ui, server)

标签: rdatetimeshinydate-range

解决方案


您不想将日期对象转换为因子。我删除了该factor()行,它工作正常。另外,我想您希望用户选择时区的位置,因为您的数据框中有两个项目,但是startend只接受一个。我添加了一个位置选择器。

require(lubridate)
require(dplyr)

df = data.frame(timestring = c("2015-12-12 13:34:56", "2015-12-14 16:23:32"),
                localzone = c("America/Los_Angeles", "America/New_York"), stringsAsFactors = F)

df$moment = as.POSIXct(df$timestring, format="%Y-%m-%d %H:%M:%S", tz="UTC")

df = df %>% rowwise() %>% mutate(localtime = force_tz(moment, localzone))

df$localtime = as.Date(df$localtime, format = "%Y/%m/%d")

df
## app.R ##
library(shiny)
library(shinydashboard)

ui <- dashboardPage(
    dashboardHeader(),
    dashboardSidebar(
        selectInput(inputId = "choosezone", label = "Choose your location",choices = c("LA", "NY")),
        uiOutput("selectdate") 
    ),
    dashboardBody()
)

server <- function(input, output) {
    output$selectdate = renderUI({
        location_choice = ifelse(input$choosezone == "LA", 1, 2)
            dateRangeInput('dateRange',
                           label = 'Date range input: yyyy-mm-dd',
                           start = df$localtime[location_choice] - 2, end = df$localtime[location_choice] + 2
            )
    })

}

shinyApp(ui, server)


推荐阅读