gpt4 book ai didi

r - 根据Shiny R中选定的日期范围触发查询

转载 作者:行者123 更新时间:2023-12-01 18:58:21 24 4
gpt4 key购买 nike

我使用 SQL 查询在 R 中提取了下面提到的数据帧。

Query<-paste0("select ID, Date, Value, Result
From Table1
where date(date)>='2018-07-01'
and date(date)<='2018-08-31');")

Dev1<-dbgetquery(database,Query)

开发者1:

ID        Date                   Value        Result
KK-112 2018-07-01 15:37:45 ACR Pending
KK-113 2018-07-05 18:14:25 ACR Pass
KK-114 2018-07-07 13:21:55 ARR Accepted
KK-115 2018-07-12 07:47:05 ARR Rejected
KK-116 2018-07-04 11:31:12 RTR Duplicate
KK-117 2018-07-07 03:27:15 ACR Pending
KK-118 2018-07-18 08:16:32 ARR Rejected
KK-119 2018-07-21 18:19:14 ACR Pending

使用上述数据框,我在 R 中创建了下面提到的枢轴数据框。

Value      Pending   Pass    Accepted   Rejected   Duplicate
ACR 3 1 0 0 0
ARR 0 0 1 2 0
RTR 0 0 0 0 0

我只是想要一点帮助来根据日期范围触发这些查询(例如,如果在 Shiny 的仪表板上选择某个日期范围,数据会自动更新)。

为了简单起见,我只使用了 4 列数据框,但在我的原始数据中,我有 30 列,并且它不适合 ui 仪表板上的框架。请建议如何构建表格和为标题着色。

我正在使用下面提到的示例代码来传递数据帧。

library(shiny)
library(dplyr)
library(shinydashboard)
library(tableHTML)

ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
tableHTML_output("mytable")
)
)
server <- function(input, output) {

Date<-Dev1$Date
{
output$mytable <- render_tableHTML( {
Pivot<-data.table::dcast(Dev1, Value ~ Result, value.var="ID",
fun.aggregate=length)

Pivot$Total<-rowSums(Pivot[2:3])

Pivot %>%
tableHTML(rownames = FALSE,
widths = rep(80, 7))
})
}
}
shinyApp(ui, server)

R所需的样本设计:

enter image description here

最佳答案

具体操作方法如下 -

library(shiny)
library(dplyr)
library(data.table)
library(shinydashboard)
library(tableHTML)
library(DT)

ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
dateRangeInput("dates", "Select Dates"),
actionButton("run_query", "Run Query"),
br(), br(),
tags$strong("Query that will be run when user hits above button"),
verbatimTextOutput("query"),
br(),
tableHTML_output("mytable"),
br(),
DTOutput("scrollable_table")
)
)
server <- function(input, output) {

Dev1 <- eventReactive(input$run_query, {
# Query <- sprintf("select ID, Date, Value, Result From Table1 where date(date) >= '%s' and date(date) <= '%s');",
# input$dates[1], input$dates[2])
# dbgetquery(database, Query)
structure(list(ID = c("KK-112", "KK-113", "KK-114", "KK-115",
"KK-116", "KK-117", "KK-118", "KK-119"),
Date = c("2018-07-01 15:37:45", "2018-07-05 18:14:25", "2018-07-07 13:21:55", "2018-07-12 07:47:05",
"2018-07-04 11:31:12", "2018-07-07 03:27:15", "2018-07-18 08:16:32",
"2018-07-21 18:19:14"),
Value = c("ACR", "ACR", "ARR", "ARR", "RTR", "ACR", "ARR", "ACR"),
Result = c("Pending", "Pass", "Accepted", "Rejected", "Duplicate", "Pending", "Rejected", "Pending")),
.Names = c("ID", "Date", "Value", "Result"),
row.names = c(NA, -8L), class = "data.frame")
})

output$mytable <- render_tableHTML({
req(Dev1())
Pivot <- data.table::dcast(Dev1(), Value ~ Result, value.var="ID",
fun.aggregate=length)
Pivot$Total <- rowSums(Pivot[, 2:6])
Pivot %>%
tableHTML(rownames = FALSE, widths = rep(80, 7)) %>%
add_css_header(., css = list(c('background-color'), c('blue')), headers = 1:7)
})

output$query <- renderPrint({
sprintf("select ID, Date, Value, Result From Table1 where date(date) >= '%s' and date(date) <= '%s');",
input$dates[1], input$dates[2])
})

output$scrollable_table <- renderDT({
data.frame(matrix("test", ncol = 30, nrow = 5), stringsAsFactors = F) %>%
datatable(options = list(scrollX = TRUE, paginate = F))
})
}
shinyApp(ui, server)

您可以使用 dateRangeInput() 将日期作为输入,它在 Dev1 中提供查询(在我的代码中注释掉)。实时查询显示在 verbatimTextOutput("query") 下。我已将 Dev1 eventReactive 表示仅当用户点击“运行查询”按钮时才会提取数据。这将允许用户在运行查询之前设置起始日期和截止日期(如果您要提取大量数据,则很有用)。每当 Dev1 更新时,mytable 都会更新。

还为 tableHTML header 添加了颜色。

对于可水平滚动的表格,我建议使用 DT 包,如 DTOutput("scrollable_table") 所示。

希望这就是您正在寻找的内容。

注意:请确保清理查询以避免任何 SQL 注入(inject)的可能性。基本的谷歌搜索应该会有所帮助。

关于r - 根据Shiny R中选定的日期范围触发查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52447285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com