0

val以下で作成されたデータ値に似た変数を使用しています。

# data --------------------------------------------------------------------

data("mtcars")
val <- c(mtcars$wt, 10.55) 

この変数を次の方法でカットしています。

# Cuts --------------------------------------------------------------------

cut_breaks <- pretty_breaks(n = 10, eps.correct = 0)(val)
res <- cut2(x = val, cuts = cut_breaks)

これにより、次の結果が生成されます。

> table(res)
res
[ 1, 2) [ 2, 3) [ 3, 4) [ 4, 5) [ 5, 6)       6       7       8       9 [10,11] 
      4       8      16       1       3       0       0       0       0       1

作成された出力で、次を変更したいと思います。

  • 1 つの値を持つグループを作成することに興味はありません。理想的には、各グループが少なくとも 3/4 の値を持つようにしたいと考えています。逆説的に、値が 0 のグループを残すことができます。これは、後で実際のデータをマージするときに削除されるためです。
  • 切断メカニズムへの変更は、整数値を持つ変数で作業する必要があります
  • カットはきれいでなければなりません。1.23 - 2.35 のようなものを避けようとしています。それらの値が分布を考えると最も賢明であるとしても.
  • 事実上、私が達成しようとしているのはこれです:多かれ少なかれきれいなグループを作るようにしてください。本当に小さなグループを取得してから次のグループと一緒にぶつけても、空のグループについて心配する必要はありません

完全なコード

便宜上、完全なコードを以下に示します。

# Libs --------------------------------------------------------------------

   Vectorize(require)(package = c("scales", "Hmisc"),
                      character.only = TRUE)


   # data --------------------------------------------------------------------

   data("mtcars") val <- c(mtcars$wt, 10.55) 

   # Cuts --------------------------------------------------------------------

   cut_breaks <- pretty_breaks(n = 10, eps.correct = 0)(val) res <-
   cut2(x = val, cuts = cut_breaks)

私が試したこと

最初のアプローチ

私はコードeps.correct = 0のような値で遊んでみました:pretty_breaks

cut_breaks <- pretty_breaks(n = cuts, eps.correct = 0)(variable)

しかし、どの値も近いところに私を連れて行ってくれません

2 番目のアプローチ

m= 5関数で引数を使用してみましcut2たが、同じ結果に達し続けています。


コメント返信

私の休憩機能

関数を試してみましたmybreaksが、より多くの奇妙な変数を適切にカットするには、いくつかの作業を行う必要があります。大まかに言えば、pretty_breaks私にとってはうまくいきますが、時々発生する小さなグループは望ましくありません。

> set.seed(1); require(scales)
> mybreaks <- function(x, n, r=0) {
+   unique(round(quantile(x, seq(0, 1, length=n+1)), r))
+ }
> x <- runif(n = 100)
> pretty_breaks(n = 5)(x)
[1] 0.0 0.2 0.4 0.6 0.8 1.0
> mybreaks(x = x, n = 5)
[1] 0 1
4

1 に答える 1

1

このquantile()関数を比較的簡単な方法として使用して、各グループで同様の数の観測値を取得できます。

たとえば、値のベクトルx、必要な数のグループ、およびブレークnの必要な丸めポイントを取得し、提案されたカット ポイントを提供する関数を次に示します。r

mybreaks <- function(x, n, r=0) {
  unique(round(quantile(x, seq(0, 1, length=n+1)), r))
}

cut_breaks  <- mybreaks(val, 5)
res <- cut(val, cut_breaks, include.lowest=TRUE)
table(res)

 [2,3]  (3,4] (4,11] 
     8     16      5 
于 2016-01-04T22:29:25.477 に答える