【问题标题】:Column names based on Shiny dateRangeInput values基于闪亮的 dateRangeInput 值的列名
【发布时间】:2018-06-27 03:30:25
【问题描述】:

下面,我有一些我正在创建的闪亮应用程序的基本代码。我想获取用户上传的文件,将数据集分成两部分 - 一个基于第一个输入的日期范围,一个用于第二个。然后,根据这些时间段计算数据集中不同列的总和。我可以让所有这些工作,但我的问题是我是否可以以某种方式使用 input$daterange1 和 input$daterange2 来命名数据表的列,以便用户知道哪些总和与哪些时间段相关联。那么下面,我可以以某种方式将“Sum 1”和“Sum 2”更改为用户输入的日期范围吗?

ui <- fluidPage(
sidebarLayout(
 sidebarPanel(
  fileInput("file1", "Choose CSV File",
            accept=".csv"),
  dateRangeInput("daterange1", "Specify First Date Range", start="2016-12-06", end=Sys.Date()),
  dateRangeInput("daterange2", "Specify Second Date Range", start=(Sys.Date()-30), end=Sys.Date(),
                 min="2016-12-06", max=Sys.Date()),
  actionButton("submit", "Submit"),
  width=3
),

mainPanel(
  tabsetPanel(
    tabPanel("Sum", DT::dataTableOutput("tab"), downloadButton("dltab", "Download"))
 )
)

服务器

server <- function(input, output, session) {
   observeEvent(input$submit,{
   file1=input$file1
   if (is.null(file1)){
      return(NULL)
  }
  df<-read.csv(file1$datapath, fileEncoding = "UTF-8-BOM")
  df$FAIL<-ifelse(df$OPERATION_STATUS %in% "FAIL",1,0)
df$CATEGORY<-sub("\\s+\\d+", "", df$CRIT_CODE)
df$DATE<-as.Date(df$DATE)

audit<-df
setDT(audit)
audit[,group_o := DATE >= as.Date(input$daterange1[1]) & DATE <= as.Date(input$daterange1[2])]
audit[,group_i := DATE >= as.Date(input$daterange2[1]) & DATE <= as.Date(input$daterange2[2])]
dt<-(audit[, .(
  "Sum 1" = sum(OPERATION_STATUS[group_o]),
  "Sum 2" = sum(OPERATION_STATUS[group_i]),
  "Difference of Sums" = (sum(OPERATION_STATUS[group_o]) - sum(OPERATION_STATUS[group_i])),
  keyby = .("Area" = CRIT_CODE)])
output$tab<-DT::renderDataTable({
  datatable(dt)
})

【问题讨论】:

    标签: r shiny user-input


    【解决方案1】:

    我们需要创建如下所示的反应变量,然后在加载文件后使用这些变量作为列的名称。

     server<-function(input,output,session){
    
      colA <- NULL
      colB <- NULL
    
     makeReactiveBinding("colA")
     makeReactiveBinding("colB")
    
      observeEvent(input$daterange1, { 
        colA<<-input$daterange1
        colA<<-paste(colA[1],"-",colA[2])
        colA<<-as.character(colA)
        print(colA)
        })
    
      observeEvent(input$daterange2, { 
        colB<<-input$daterange2
        colB<<-paste(colB[1],"-",colB[2])
        colB<<-as.character(colB)
        print(colB)
      })
    
    
    observeEvent(input$submit, { .......
      names(dt)<-c(colA,colB)
    
    })
    
    }
    

    注意input$daterange1/2 会给我们两个变量,因为它是一个范围。因此,我们将colA/B 的第一个和第二个元素粘贴在一起,以获得一个字符串中的日期范围。

    【讨论】:

    • 你太棒了!非常感谢!
    • @Lost Np。很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 2020-01-03
    • 2013-05-16
    • 2021-01-04
    • 2020-03-14
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多