2017-10-04 3 views
0

Dans mon application Shiny, j'ai inclus un dateRangeInput qui prend une date de début et de fin comme entrées. J'ai aussi un autre élément selectInput ui, qui prend une entrée (exclu de ce poste)L'utilisation de dateRangeInput pour filtrer les données ne produit pas le résultat souhaité

Un extrait de ui.R

column(wellPanel(
tags$style('.input-sm {font-size: 20px; } label {font-weight: 500; margin-bottom: 30px; }'), 
dateRangeInput("inp_pg1daterange", 
       label = paste('Date Range Selection'), 
       start = min(results_combined$Date), 
       end = max(results_combined$Date), 
       separator = " to ", 
       weekstart = 1 

) 

),width=3) 

Et sur la server.R côté, je me attends les entrées de date:

1) filtrer une trame de données 2) convertir et stocker l'ensemble de données filtré en un ensemble de variables différentes 3) basé sur un selectInput , Afficher une valueBox avec la valeur correcte

C'est ce que le code du serveur ressemble

server <- function(input, output,session) { 

Étape 1) Filtre dataframe en utilisant daterange entrée

kpidf_pg1_totalqol= reactive({ 

results_combined %>% 
filter(SVM_LABEL_QOL=='QoL' & Date >=input$inp_pg1daterange[[1]] & Date <=input$inp_pg1daterange[[2]]) %>% 
select(`Global Segment`=globalsegment,Classified=SVM_LABEL_QOL) %>% 
group_by(`Global Segment`) %>% 
summarise(n=n()) %>% 
select(`Global Segment`,Count=n) %>% 
ungroup() 

}) #close reactive function 

Étape 2) Convertir et stocker l'ensemble de données filtré dans un ensemble de variables différentes (toujours dans la même fonction réactive)

totalqol_enr <- unlist(subset(kpidf_pg1_totalqol(), `Global Segment` == "ENR", select = Count)) 
totalqol_def <- unlist(subset(kpidf_pg1_totalqol(), `Global Segment` == "DEF", select = Count)) 
totalqol_snr <- unlist(subset(kpidf_pg1_totalqol(), `Global Segment` == "SNR", select = Count)) 
totalqol_jus <- unlist(subset(kpidf_pg1_totalqol(), `Global Segment` == "JUS", select = Count)) 
totalqol_gov <- unlist(subset(kpidf_pg1_totalqol(), `Global Segment` == "GOV", select = Count)) 
totalqol_hc <- unlist(subset(kpidf_pg1_totalqol(), `Global Segment` == "HC", select = Count)) 
totalqol_spl<- unlist(subset(kpidf_pg1_totalqol(), `Global Segment` == "SPL", select = Count)) 

Etape 3) Sur la base d'une selectInput, l'application affiche une valueBox avec la valeur correcte de l'étape précédente

output$KPItotalqol <-renderValueBox({ 
if(input$inp_pg1segment=="ENR") 
{ 
    valueBox(
    value = totalqol_enr() 
    ,"Total number of QoL tweets identified" 
    ,icon = icon("twitter-square") 
    ,color = "green") 
} 
else 
    if(input$inp_pg1segment=="DEF") 
    { 
    valueBox(
     value = totalqol_def() 
     ,"Total number of QoL tweets identified" 
     ,icon = icon("twitter-square") 
     ,color = "green") 
    } 
else 
    if(input$inp_pg1segment=="SNR") 
    { 
    valueBox(
     value = totalqol_snr() 
     ,"Total number of QoL tweets identified" 
     ,icon = icon("twitter-square") 
     ,color = "green") 
    } 
else 
    if(input$inp_pg1segment=="JUS") 
    { 
    valueBox(
     value = totalqol_jus() 
     ,"Total number of QoL tweets identified" 
     ,icon = icon("twitter-square") 
     ,color = "green") 
    } 
else 
    if(input$inp_pg1segment=="GOV") 
    { 
    valueBox(
     value = totalqol_gov() 
     ,"Total number of QoL tweets identified" 
     ,icon = icon("twitter-square") 
     ,color = "green") 
    } 
else 
    if(input$inp_pg1segment=="HC") 
    { 
    valueBox(
     value = totalqol_hc() 
     ,"Total number of QoL tweets identified" 
     ,icon = icon("twitter-square") 
     ,color = "green") 
    } 
else 
{ 
    valueBox(
    value = totalqol_spl() 
    ,"Total number of QoL tweets identified" 
    ,icon = icon("twitter-square") 
    ,color = "green") 
} 

}) 

Cependant ceci est la production d'une erreur qui indique la fonction Could not find function totalqol_def

Toutes les idées sur comment cela peut fonctionner seront appréciées!

+0

Pourquoi vous appelez '' 'kpidf_pg1_totalqol''' en lui-même? – amrrs

+0

Je vous recommande de jeter un oeil à https://www.programiz.com/r-programming/if-else-statement pour les instructions appropriées «if else-if else». –

+0

@amrrs Je l'ai édité. Mais cela me donne toujours une erreur (Vous avez essayé de faire quelque chose qui ne peut être fait qu'à l'intérieur d'une expression réactive ou d'un observateur) – Varun

Répondre

1

Toutes ces expressions de fonctions doivent être incluses dans reactive Individuellement ou combinées.

Individuellement,

Exemple:

totalqol_enr <- reactive({ 
unlist(subset(kpidf_pg1_totalqol(), `Global Segment` == "ENR", select = Count)) 
}) 

Ainsi, vous pouvez appeler ces fonctions totalqol_enr()

+0

Merci encore pour votre aide, je les ai inclus individuellement et ils fonctionnent. Je comprends ce que je faisais mal. Quand vous dites inclure ces fonctions dans les expressions combinées, comment feriez-vous cela? – Varun