要在我的应用中实施地图工具,我从GADM加载了.rds
形状文件。
在闪亮的地方显示地图很好,但我不确定下一步。据我所知,我必须将.rds
文件与我的实际数据相匹配?
它们共享一个公共ID,但简单的merge()
会在数据字段中生成NA
。什么是将形状文件和我的数据(在反应式表达式中)组合在一起的有效方法?
编辑: 到目前为止我的代码:
dat <- reactive({
adm <- getData('GADM', country='DEU', level=1)
#test data
test_data <- data.frame(ID_1= (1:16), N= (1:16))
#join
joined <- merge(Map_ger, test_data, by.x="ID_1")
#color pallete
pal <- colorNumeric(
palette = "Blues",
domain = joined$N
)
})
output$mymap <- renderLeaflet({
leaflet() %>% addProviderTiles("Esri.WorldGrayCanvas") %>%
addPolygons(data=dat(),stroke = FALSE, smoothFactor = 0.2, fillOpacity = 1,
color = ~pal(N))
})
现在问题是如何从我的反应表达式中访问pal值:dat()$pal
无效。
答案 0 :(得分:1)
你已经得到了答案:
他们都共享一个公共ID,但一个简单的
merge()
会导致NA
内部 数据字段。
如果您获得NA
值,则merge
命令不起作用。在不查看数据的情况下,您可以考虑尝试验证向量中的值实际上是否相同,例如:
a <- 1:10
b <- rep(1:15, 3)
unique(b) %in% unique(a)
您可能想要表达式:
all(unique(b) %in% unique(a))
返回TRUE
。与修复问题有关的常见方法可能涉及运行:
trimws(tolower(as.character(yourID)))
在两个ID
列上确保空格或变量使用大写/小写在合并时会产生问题;在处理具有地理名称的数据时,这是一个常见的障碍。
请注意,如果考虑发布一些示例数据,所描述的merge
问题会更容易解决。