in R, leaflet don't reflect the latitude nor longitude?

后端 未结 1 721
礼貌的吻别
礼貌的吻别 2020-11-30 15:19

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 &

相关标签:
1条回答
  • 2020-11-30 15:46

    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)
    
    0 讨论(0)
提交回复
热议问题