下面,我有一些我正在创建的闪亮应用程序的基本代码。 我想获取用户上传的文件,将数据集分为两部分 - 一个基于第一个输入的日期范围,另一个基于第二个。 然后,根据这些时间段计算数据集中不同列的总和。 我可以让所有这些工作,但我的问题是我是否可以以某种方式使用 input$daterange1 和 input$daterange2 来为数据表的列命名,以便用户知道哪些总和与哪些时间段相关联。 那么在下面,我可以以某种方式将"总和 1"和"总和 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)
})
我们需要创建如下所示的反应变量,然后在加载文件后使用这些变量作为列的名称。
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
的第一个和第二个元素粘贴在一起,以在一个字符串中获取日期范围。