R:如何创建具有不同分类边界的多个地图(rworldmap)?

时间:2015-12-26 14:57:53

标签: r

基于@Andy回答的我以前的question,我希望使用Jenks自然中断为每个地图设置不同的分类间隔。为此,我使用了库classInt,它适用于单个图。但是,我不知道如何将每列(或映射)的不同分类实现到@Andy的lapply解决方案中。这可能很容易。因此,使用我之前问题的示例数据,我将创建这样的分类间隔(基于spdf对象):

library(classInt)
# create classification intervalls for single columsn
classInt_Bv <- classIntervals( spdf$BLUE.veggies, n=3, style="jenks")
Bv = classInt_Bv$brks
classInt_Bf <- classIntervals( spdf$BLUE.fruits, n=3, style="jenks")
Bf = classInt_Bf$brks
classInt_Bn <- classIntervals( spdf$BLUE.nuts, n=3, style="jenks")
Bn = classInt_Bn$brks
classInt_Gv <- classIntervals( spdf$GREEN.veggies, n=3, style="jenks")
Gv = classInt_Gv$brks
classInt_Gf <- classIntervals( spdf$GREEN.fruits, n=3, style="jenks")
Gf = classInt_Gf$brks
classInt_Gn <- classIntervals( spdf$GREEN.nuts, n=3, style="jenks")
Gn = classInt_Gn$brks
# merge all cols again together
catMethod = data.frame(Bv,Bf,Bn,Gv,Gf,Gn)

在这里,也许我的第一个问题是有更简单/更快的方法吗?正如我在第二个df中使用超过50列。

我的第二个(和主要)问题是:如何将这些分类间隔实现到@ Andy的lapply函数中,以便每个映射使用wright分类间隔?谢谢

1 个答案:

答案 0 :(得分:1)

从链接中提供的示例

spdf <- df

由于存在非数字列,因此我们可以为名称具有“蓝色”和“#39”的列的数据集进行子集化。或者&#39; GREEN&#39;使用grep(&#39; i1&#39;),然后我们循环显示这些列,应用classIntervals函数并获取&#39; brks&#39;在list

i1 <- grep('^(BLUE|GREEN)', names(spdf))
lst <- lapply(spdf[i1], function(x) classIntervals(x, n=3,
                 style='jenks')$brks)
names(lst) <- sub('^(.)[^.]+.(.).*', '\\1\\2', names(lst))
res <- data.frame(lst)
res 
#        Bf       Bn     Bv       Gf      Gn     Gv
#1        0        0      0        0       0      0
#2  3745797   171984  34910  3389314  464688  15508
#3 12803543   533665  92690  8942278 1640804 149581
#4 19947613 21563867 188940 15773576 6399474 174504