函数通过R中的jenks对值进行分组

函数通过R中的jenks对值进行分组,r,grouping,R,Grouping,我尝试将函数自动化以创建组。因此,我使用包classInt中的classIntervalls和包base中的cut。我希望样式为“jenks”,默认情况下groupsize为10。如果观察结果少于10个unique我希望组数等于唯一观察结果的数量。 以下是我所尝试的: set.seed(45) b=sample(1:50,10) groupfunction<-function(data,my.style="jenks"){ ifelse(length(unique(data))<

我尝试将函数自动化以创建组。因此,我使用包
classInt
中的
classIntervalls
和包
base
中的
cut
。我希望样式为“jenks”,默认情况下groupsize为10。如果观察结果少于10个
unique
我希望组数等于唯一观察结果的数量。 以下是我所尝试的:

set.seed(45)
b=sample(1:50,10)

groupfunction<-function(data,my.style="jenks"){
  ifelse(length(unique(data))<10,tmpbrk<-length(unique(data)),tmpbrk<-10)# tests if the number of unique values is bigger than 10
  tmp<-classIntervals(data,tmpbrk,my.style,unique=T) #find the intervalls
  tmp<-cut(data,tmp$brks,dig.lab=20,include.lowest = T) #cut the data by the breaks from the intervalls
  tmp<-as.character(tmp) #turn results into characters to substitute unwanted characters
  tmp<-gsubfn(".",list("["="",","="-",")"="","("=""," "="","]"=""),tmp) # substitute unwanted characters
}

groupfunction(b)
set.seed(45)
b=样品(1:50,10)

groupfunction好的,我对代码进行了一些小的修改

groupfunction<-function(data,my.style="jenks"){
  ifelse(length(unique(data))<11,tmpbrk<-length(unique(data))-1,tmpbrk<-10)# tests if the number of unique values is bigger than 10
  tmp<-classIntervals(data,tmpbrk,style=my.style) #find the intervalls
  tmp<-cut(data,unique(tmp$brks),dig.lab=20,include.lowest = T) #cut the data by the breaks from the intervalls
  tmp<-as.character(tmp) #turn results into characters to substitute unwanted characters
  tmp<-gsubfn(".",list("["="",","="-",")"="","("=""," "="","]"=""),tmp) # substitute unwanted characters
}
groupfunction应该使用
if(.){.}else{.}
。然后你只会得到一个不足为奇的警告,因为你的向量只有唯一的值。