基于@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分类间隔?谢谢
答案 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