将带有时区对象的日期时间传递给闪亮仪表板中的日期范围输入
Pass datetime with time-zone objects to date-range input in shiny dashboard
我下面有一个闪亮的仪表板,其中有一个 dateRange()
输入,我想在其中传递带时区的日期时间。但是,当我在将日期时间对象转换为因子后尝试将它们转换为日期时,我得到 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)
您不想将日期对象转换为因数。我删除了 factor()
行并且它工作正常。另外,我想您希望用户选择时区的位置,因为您的数据框中有两个项目,但 start
、end
只接受一个。我添加了一个位置选择器。
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)
R 中的因素可能很棘手。您不能像处理日期那样处理它们,例如,您不能对它们进行加减法运算。
我已经让您的代码正常工作,但除非您对使用因子有特定要求,否则我建议您避免使用它们。
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(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[1] - 2, end = df$localtime[1] + 2
)
),
dashboardBody()
)
server <- function(input, output) {
}
shinyApp(ui = ui, server = server)
另一个问题是 df$localtime 中有两个日期,所以我更改了 dateRangeInput 以使用第一个日期。
我下面有一个闪亮的仪表板,其中有一个 dateRange()
输入,我想在其中传递带时区的日期时间。但是,当我在将日期时间对象转换为因子后尝试将它们转换为日期时,我得到 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)
您不想将日期对象转换为因数。我删除了 factor()
行并且它工作正常。另外,我想您希望用户选择时区的位置,因为您的数据框中有两个项目,但 start
、end
只接受一个。我添加了一个位置选择器。
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)
R 中的因素可能很棘手。您不能像处理日期那样处理它们,例如,您不能对它们进行加减法运算。
我已经让您的代码正常工作,但除非您对使用因子有特定要求,否则我建议您避免使用它们。
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(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[1] - 2, end = df$localtime[1] + 2
)
),
dashboardBody()
)
server <- function(input, output) {
}
shinyApp(ui = ui, server = server)
另一个问题是 df$localtime 中有两个日期,所以我更改了 dateRangeInput 以使用第一个日期。