我一直致力于 R 中的传单。
https://rstudio.github.io/leaflet/choropleths.html
上面的us-Map包含一个州的密度。数据的格式是Geo-Json。我想删除密度变量,我想传递我的列名与相应的变量值。 (例如,当您将鼠标悬停在新墨西哥州时,我的密度为17.16(density:17.16
),而我希望显示为(mycolumnname:value)
)。
答案 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
变量添加到空间数据框中。现在,您可以使用查找/替换,遍历并替换代码中的引用,其中density
与data.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$name
与a$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
这更容易从没有长字符串的内部传单中作为列名进行处理。