0

データ フレームにさまざまな属性として保存されているオプションをドロップダウン リストから選択し、スライダーを使用して年を変更して、valueCard への影響を確認したいと考えています。私が立ち往生しているのは、pf_rol属性をdf1データフレームから呼び出して、その値をvalueCardに反映する方法を見つけることです。

スライダーだけで操作できる 2 つの値カードを既に正常に作成しましたが、スライダーと selectInput を使用して ValueCard 'pfrol' の値を変更したいと考えています。

PS: 誰かがカートグラムを手伝ってくれたら本当にありがたいです。私はすべての国の名前を持っており、スライダーと一緒にさまざまな属性を操作して、値カードのように変化する傾向を観察したいと考えています。

グローバル.r

df <-   read.csv("hfi_cc_2018.csv", header = T)

summary(df)
sapply(df, function(x) sum(is.na(x)))
#Replace Null Values
df[is.na(df)] <- 0
df[,5:ncol(df)] <- round(df[,5:ncol(df)], 2)

#adding selective columns new df1
#https://stackoverflow.com/questions/10085806/extracting-specific-columns-from-a-data-frame
df1<-  df[, (names(df) %in% c("year","countries","region","pf_rol", "pf_ss_homicide","pf_ss_disappearances_violent",    
))]

ui.r

require(shiny)
require(shinydashboard)

shinyUI(

  dashboardPage( 
    dashboardHeader(title = "Human Freedom Index", titleWidth = 300),
    dashboardSidebar(
      sliderInput("years","Select Year:",
                  min = min(df1$year),
                  max = max(df1$year),
                  value = min(df1$year),
                  step = 1),
      selectInput("variable","Select Freedom Factor:",
                  choices = list("Rule of Law"= "pf_rol",
                                 "Homicides Reported" = "pf_ss_homicide")
                  )
    ),

    dashboardBody(
        fluidRow(
        valueBoxOutput("pfrol"),  
        valueBoxOutput("pfrank"),
        valueBoxOutput("efrank")
      ),
      fluidRow(
        box(plotlyOutput("plot1"), width=15, height=400)
      )
    )
  )

)

server.r

require(shiny)
require(dplyr)
require(shinydashboard)

shinyServer(function(input,output){

   observe({
     (card <- df1 %>%
      filter(year == input$years))
    output$pfrank = renderValueBox(
      valueBox(round(mean(card$pf_score),1),
               "Personal Freedom Score")
    )

  })  

observe({

   if(input$variable == "Rule of Law"){
     if(filter(df1$year == input$years)){
       output$pfrol = renderValueBox(
         valueBox(round(mean(df1$pf_rol),1),
                  "Rule of Law")
       )
     }

   }

})

})

以下の出力画像

4

1 に答える 1