属性に基づいてマップ上のポイントをフィルタリングしようとしています。1つの属性に1つの値しか含まれていない限り、正常に機能します。1つの属性に複数の値がある場合(つまり、「water; sand」)、フィルターに基づいてこのポイントをマップすることはできません。
library(data.table)
mydat <- data.table( londd=c(20, 38, 96, 32),
latdd=c(60, 56, 30, 31),
art=c("mountain", "water,sand", "sand", "forest"),
anwendung=c("a","b","c","d"))
#Set up ui
ui <- shinyUI(fluidPage(
sidebarPanel(h5("", width=2),
checkboxGroupInput(inputId="ArtFlag", label=h4("Art des Bodens"),
choices=setNames(object=c("mountain", "water", "sand", "forest"),
nm=c("mountain", "water", "sand", "forest"))),
checkboxGroupInput(inputId="AnwendungFlag", label=h4("Anwendung"),
choices=setNames(object=c("a","b","c","d"),
nm=c("a","b","c","d"))),
position="left"),
#App mainPanel content and styles
mainPanel(fluidRow(leafletOutput(outputId="lmap")))
)
)
)
#Set up server
server <- function(input, output){
#Build leaflet map
lmap <- leaflet(data=mydat)%>%
addProviderTiles("Stamen.TonerLite", options = providerTileOptions(noWrap = TRUE)) %>%
fitBounds(~min(londd), ~min(latdd), ~max(londd), ~max(latdd))
#Filter data
datFilt <- reactive(mydat[art%in%input$ArtFlag & anwendung%in%input$AnwendungFlag])
#Add markers based on selected flags
observe({
if(nrow(datFilt())==0) {print("Nothing selected");leafletProxy("lmap") %>% clearShapes()}
else{ #print(paste0("Selected: ", unique(input$InFlags & input$InFlags2)))
leafletProxy("lmap", data=datFilt())%>%clearShapes()%>%
addCircleMarkers(lng=~londd, lat=~latdd,
clusterOptions=markerClusterOptions(), weight=3,
color="#33CC33", opacity=1, fillColor="#FF9900",
fillOpacity=0.8)%>% clearShapes()
}
})
output$lmap <- renderLeaflet(lmap)
}
#Run app
shinyApp(ui = ui, server = server)
コーディングが適切にフォーマットされていない場合は申し訳ありません。私はまだ初心者です。
どうもありがとう、
クリスティーナ
まあ、これがあなたが探しているものを解決するかどうかは100%確信が持てないので、そうでない場合はコメントを残してください。問題はreactive
ステートメントにあります。「water、sand」のチェックボックスがないため、チェックボックスBに一致するものはありません。水または砂が選択されているかどうかに関係なく、チェックボックスBに一致するものを取得するには、grepl
完全一致ではなく、パターン一致を取得するために使用して、これを試しました。datFilt
これにあなたの呼び出しを変更してみてください:
#Filter data
datFilt <- reactive({
filterName <- ifelse(length(input$ArtFlag) == 0, 'none', input$ArtFlag)
mydat[grepl(filterName, art) & anwendung%in%input$AnwendungFlag]
})
(これはおそらくこれを行うための最も効率的なコードではありませんが、うまくいくか、探しているものに近づくことができれば幸いです。完璧な世界では、データの構造があれば、これをコーディングする方が簡単かもしれません。違いましたが、それがあなたの選択肢かどうかはわかりません)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加