1

グループを作成する機能を自動化しようとしています。したがってclassIntervalls、パッケージclassIntとパッケージcutから使用しbaseます。スタイルを「jenks」にして、グループサイズをデフォルトで 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)

しかし、次のエラー メッセージが表示されます。

このエラー メッセージの意味はわかっています。しかし、誰でもこの機能を実装して機能させるのを手伝ってもらえますか? 聞いcut2たことはありますが、ジェンクで実装できるかどうかはわかりません。

4

1 に答える 1

0

わかりました、コードにいくつかのマイナーな調整を加えて動作させました。

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
}

実際に行うことは、データを取得し、一意の値の長さを制御し、11 より小さいかどうかをチェックすることです。その場合、一意の値の長さ -1 を取り、これを休憩の数として適用して、ジャンクを構築します。その後、Jenks は一意の値に基づいて構築されます。この関数は単一のベクトルまたはデータフレーム全体で機能しますが、速度と df のサイズによっては PC の速度が低下する可能性があります。

于 2013-04-03T22:07:07.987 に答える