Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

in an attempt to create map like this one with my data frame and filters I found leaflet doesn't reflect any of the long. or lat. accordingly no pop up to show.dataset & css

the code


  library(shiny)
  library(dplyr)
  library(leaflet)
  library(readr)
  CBdata <- read_csv("/cloud/project/TESTLEAF/www/cblnglt.csv")
  df0<- data.frame("cho"=c("No schooling completed","vocational","Bachelor","Post Graduate ","Single","Married","Divorced","others","male","female","under_20","21_30","31_39","31_40","41_50","51_59","over_60","Retired","Public_Employee","Private_Employee","Self_employeed","Unemployed","Others"),
                   "cat"=c("educ.","educ.","educ.","educ.","Relationship.Status","Relationship.Status","Relationship.Status","Relationship.Status","by_gender","by_gender","By_age","By_age","By_age","By_age","By_age","By_age","By_age","profession","profession","profession","profession","profession","profession"))

  CBdata2<-as.data.frame(CBdata)
  ui<-
    navbarPage("Mapping Dashboard",
               theme = "bootstrap.css",
               tabPanel("tbd",
                        div(class="outer",
                            leafletOutput("mymap", width = "100%", height = "100%"), #
                            absolutePanel(id = "controls", class = "panel panel-default", 
                                          fixed = TRUE,draggable = TRUE, top = "10%", left = "auto", right = 20, bottom = "auto",
                                          width = 330, height = "auto", cursor = "move",br(),
                                          selectInput("region", "Which governorate?", unique(CBdata$by_gov), selected = "Mumbai"),
                                          selectInput("variable", "Filter by?", unique(df0$cat),         selected = "by_gender"),
                                          selectInput("sndvariable","sub filter",choices =NULL),
                                          selectInput("indicator","select Indicator",c("xyz","abc"),
                                                      selected = "abc"),
                                          plotOutput("bar", height = "250px"),
                            ))),
               tabPanel("By Product"))

  server<-function(input,output,session){
    observe({
      TX<-df0%>%filter(cat==input$variable)%>%select(cho)
      updateSelectInput(session,"sndvariable","sub filter",choices = unique(TX))
    })
    CBD1<-reactive({
      #browser
      CBdata2%>%
        filter(input$variable==input$sndvariable,by_gov==input$region)%>%
        group_by(lng,lat,input$variable,by_gov,input$indicator)%>%
        arrange(desc(input$indicator)) %>%
        select(lng,lat,input$variable,by_gov,input$indicator)
      })
      CBD2<-reactive({
        #browser
        summarize(CBD1(),summation=sum(as.integer(input$indicator)))
            })
      CBD3<-reactive({as.data.frame(CBD2())
      })
    output$mymap<-renderLeaflet({
      CBD3()%>%leaflet()%>%
        addProviderTiles(provider = "CartoDB.DarkMatter")%>%
        addCircleMarkers(lng=~lng,lat=~lat)
    })
      }
  shinyApp(ui,server)

attahced the css that i used in my app, and all data required. if i removed the lng=~lng and inserted the real value it works fine but the issue arise when we use the dataframe.

thanks in advance

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
867 views
Welcome To Ask or Share your Answers For Others

1 Answer

Your problem is that your inputs eg. input$variable return text. But you want the dplyr functions such as filter to use those inputs as if they were variables in your dataset, rather than text.

As an example:

# this fails because input_filter is a character vector and not a variable
my_filt_wrong <- function(data, input_filter, cond){
  data %>% 
    filter(input_filter == cond)
}

my_filt_wrong(iris, 'Species', 'setosa')
#[1] Sepal.Length Sepal.Width  Petal.Length Petal.Width  Species     
#<0 rows> (or 0-length row.names)
# this works because we tell r to evaluate the input text as a variable
my_filt <- function(data, input_filter, cond){
  data %>% 
    filter(!!sym(input_filter) == cond)
}

my_filt(iris, 'Species', 'setosa')

## A tibble: 50 x 5
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
# 1          5.1         3.5          1.4         0.2 setosa 
# 2          4.9         3            1.4         0.2 setosa 
# 3          4.7         3.2          1.3         0.2 setosa 
# 4          4.6         3.1          1.5         0.2 setosa 
# 5          5           3.6          1.4         0.2 setosa 

If we replace your input$... with !!sym(input$...) where we want to refer to a variable in our dataset, the map should now work.

library(shiny)
library(dplyr)
library(leaflet)
library(readr)
CBdata <- read_csv("~/downloads/cblnglt.csv")
df0<- data.frame("cho"=c("No schooling completed","vocational","Bachelor","Post Graduate ","Single","Married","Divorced","others","male","female","under_20","21_30","31_39","31_40","41_50","51_59","over_60","Retired","Public_Employee","Private_Employee","Self_employeed","Unemployed","Others"),
                 "cat"=c("educ.","educ.","educ.","educ.","Relationship.Status","Relationship.Status","Relationship.Status","Relationship.Status","by_gender","by_gender","By_age","By_age","By_age","By_age","By_age","By_age","By_age","profession","profession","profession","profession","profession","profession"))

CBdata2<-as.data.frame(CBdata)
ui<-
  navbarPage("Mapping Dashboard",
             theme = "bootstrap.css",


             tabPanel("tbd",
                      div( class= 'outer',
                          leafletOutput("mymap", width = "100%", height = "100%"), 
                          absolutePanel(id = "controls", class = "panel panel-default", 
                                        fixed = TRUE,draggable = TRUE, top = "10%", left = "auto", right = 20, bottom = "auto",
                                        width = 330, height = "auto", cursor = "move",br(),
                                        selectInput("region", "Which governorate?", unique(CBdata$by_gov), selected = "Mumbai"),
                                        selectInput("variable", "Filter by?", unique(df0$cat),  selected = "by_gender"),
                                        selectInput("sndvariable","sub filter",choices =NULL),
                                        selectInput("indicator","select Indicator",c("xyz","abc"),
                                                    selected = "abc"),
                                        plotOutput("bar", height = "250px")
                          )
                          )),
             tabPanel("By Product",
                      tableOutput('mytable'))
  )

server<-function(input,output,session){
  observe({
    TX<-df0 %>% filter(cat==input$variable)%>%select(cho)
    updateSelectInput(session,"sndvariable","sub filter",choices = unique(TX))
  })

  CBD1<-reactive({
    #browser
    CBdata2 %>%
      filter(!!sym(input$variable)==input$sndvariable,by_gov==input$region) %>%
      group_by(lng,lat,!!sym(input$variable),by_gov,!!sym(input$indicator))%>%
      arrange(desc(!!sym(input$indicator))) 



  })

    CBD2<-reactive({
      #browser
      summarize(CBD1(), summation = sum(as.integer(!!sym(input$indicator))))
    })

    output$mytable <- renderTable(
      CBD2()
    )
    output$mymap<-renderLeaflet({
      CBD2() %>%
      leaflet()%>%
        addProviderTiles(provider = "CartoDB.DarkMatter")%>%
        addCircleMarkers(lng=~lng, lat=~lat)
    })
}

shinyApp(ui,server)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...