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



根据@Andy之前回答的问题,我希望使用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多个cols。

我的第二个(也是主要的)问题是:如何将这些分类区间实现到@Andy的lapply函数中,以便每个地图都使用wright分类区间?感谢

来自链接中提供的示例

spdf <- df

由于存在非数字列,我们可以为那些名称为"BLUE"或"GREEN"且带有grep('i1')的列的数据集子集,然后循环这些列,应用classIntervals函数并获得list中的"brks"。

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

最新更新