R Leaflet-将密度更改为我自己的列名

时间:2017-08-16 14:08:12

标签: r leaflet

我一直致力于 R 中的传单。

https://rstudio.github.io/leaflet/choropleths.html

上面的us-Map包含一个州的密度。数据的格式是Geo-Json。我想删除密度变量,我想传递我的列名与相应的变量值。 (例如,当您将鼠标悬停在新墨西哥州时,我的密度为17.16(density:17.16),而我希望显示为(mycolumnname:value))。

1 个答案:

答案 0 :(得分:0)

这是使用传单时非常常见的需求。有几种方法可以做到这一点,但这是我心中最简单的方法: 您要绘制的所有信息都存储在状态@数据中找到的SpatialPolygonsDataFrame部分中,您可以通过查看此数据框部分的头部来查看:

我使用上面代码中原始SpatialPolygonsDataFrame名称states的状态名创建了一个数据框(传统的r数据框),并创建了my_var

a<-data.frame( States=states@data$name)
a$my_var <- round(runif(52, 15, 185),2)

这是我的新数据框的前几行,与您的数据框类似,但其数据不是密度。

head(a)
      States my_var
1    Alabama 120.33
2     Alaska 179.41
3    Arizona  67.92
4   Arkansas  30.57
5 California  72.26
6   Colorado  56.33

现在您已拥有此数据框,您可以调用库maptools并执行多边形cbind,如下所示:

states2<-spCbind(states,a$my_var)

现在看看states2的头部(您可以命名状态并替换原始状态SpatialPolygonsDataFrame我保持两者之前和之后的比较)

head(states2@data)
  id       name density data.my_var
0 01    Alabama  94.650       58.01
1 02     Alaska   1.264       99.01
2 04    Arizona  57.050       81.05
3 05   Arkansas  56.430      124.68
4 06 California 241.700      138.19
5 08   Colorado  49.330      103.78

这将data.my_var变量添加到空间数据框中。现在,您可以使用查找/替换,遍历并替换代码中的引用,其中densitydata.my_var一起使用,并且将使用新变量。

需要考虑的重要事项 您的数据有50个状态名称,空间数据框有52个,您需要在cBinding它们之前将缺少的状态添加到数据框中,它们必须是相同的长度并且顺序相同。

如果你抓住这样的名字:

a<-data.frame( States=states@data$name)
从状态对象

然后,您可以使用您的数据在状态上保持合并,并且它将保留订单a以及所有新区域没有数据集中的数据的空白单元格将保留空。

使用merge确保数据正确排列。

 a<- merge(a, your_data ,by=c("States","name"))

此外,一旦合并它们并且您已检查states@data$namea$States的顺序相同,您可以使用任何名称作为SpatialPolygonDataFrame中的新标题,方法是将数据提取到在绑定它们之前使用您想要的名称的向量:

my_var <- a$my_var
states2<-spCbind(states, my_var)

这将为您留下如下所示的数据框:

  id       name density      my_var
0 01    Alabama  94.650       58.01
1 02     Alaska   1.264       99.01  

这更容易从没有长字符串的内部传单中作为列名进行处理。