Как я могу использовать значение sliderInput, чтобы выбрать столбец и использовать его для изменения карты R? - PullRequest
0 голосов
/ 01 мая 2018

Я работаю с ShinyApps в R. Я использую и sliderInput, значения которых находятся между 2010 и 2015, потому что вы выбираете год. Мои данные как:

> data     
     nomMun    2010 2011 2012 2013 2014 2015  lon   lat
1    ABRERA     0    0    5    3    2    0    1.12  40.1
2    AGER       2    0    1    1    0    0    1.54  40.2
3    AGRAMUNT   1    1    0    2    0    1    1.36  40.3

Я хочу использовать столбец, имя которого совпадает с входным значением (например, данные $ 2010, если значение ползунка равно 2010). Мне нужно выбрать значение этого столбца, чтобы указать радиус круга, который я добавляю на карту.

 output$MapPlot1<-renderLeaflet({
 any<-input$any1
 content<-paste(data$nomMun,paste("Accidents",data$any))
 leaflet(data) %>% addTiles() %>%
  addCircles(lng = ~lon, lat = ~lat, weight = 1, stroke=TRUE,radius = 
  ~sqrt(any)*100,popup = content, fillOpacity = 0.2)
 })

Спасибо, что посвятили свое время !!

1 Ответ

0 голосов
/ 01 мая 2018

Вы можете выбрать его с помощью [[ после преобразования числового значения в символ:

addCircles(
    lng         = ~lon
  , lat         = ~lat
  , weight      = 1
  , stroke      = TRUE
  , radius      = ~sqrt(data[[paste0(input$any1)]])*1000
  , popup       = paste(data$nomMun, paste("Accidents", data[[paste0(any)]]))
  , fillOpacity = 0.2
)

Лучший способ

Лучшим способом было бы объединить данные, чтобы отфильтровать их по столбцу года. Таким образом, вы всегда будете ссылаться на один и тот же столбец в функциях листовки, а данные определяют различия.

library("shiny")
library("data.table")
library("purrr")
library("leaflet")

data <- fread('nomMun,2010,2011,2012,2013,2014,2015,lon,lat
ABRERA,0,0,5,3,2,0,1.12,40.1
AGER,2,0,1,1,0,0,1.54,40.2
AGRAMUNT,1,1,0,2,0,1,1.36,40.3', sep = ",", header = TRUE)

# set any 0 values to NA so they'll be dropped when we convert to long form
data[data == 0] <- NA

molten_data <- melt.data.table(
    data            = data
  , id.vars         = c("nomMun", "lon", "lat")
  , variable.name   = "year"
  , variable.factor = FALSE
  , na.rm           = TRUE 
)

molten_data[, `:=`(
    year    = as.integer(year)
  , content = paste(nomMun, paste("Accidents", value))
)]

year_range <- range(molten_data$year)


ui <- fluidPage(

  sliderInput(
      inputId = "any1"
    , label   = "Year"
    , min     = year_range[1]
    , max     = year_range[2]
    , value   = year_range[1]
    , step    = 1
    , sep     = ""
  )
  , leafletOutput("MapPlot1")

)

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

  year_data <- reactive({
    molten_data[year == input$any1]
  })

  output$MapPlot1 <- renderLeaflet({

    year_data() %>%
      leaflet() %>% 
      addTiles() %>%
      addCircles(
          lng         = ~lon
        , lat         = ~lat
        , weight      = 1
        , stroke      = TRUE
        , radius      = ~sqrt(value)*1000
        , popup       = ~content
        , fillOpacity = 0.2
      )

  })

}

shinyApp(ui, server)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...