14

カット関数を使用してデータを等しいビンに分割していますが、それは機能しますが、値を返す方法に満足していません。私が必要とするのは、上端と下端ではなく、ビンの中心です。
も使用しようとしましたがcut2{Hmisc}、これにより各ビンの中心が得られますが、同じ長さではなく、同じ数の観測を含むビンのデータ範囲が分割されます。

誰にもこれに対する解決策がありますか?

4

3 に答える 3

10

このようなもので、ブレークとラベルを自分で作成するのはそれほど難しくありません。ここでは中点が単一の数値であるため、実際にはラベル付きの因子を返すのではなく、数値ベクトルを返します。

cut2 <- function(x, breaks) {
  r <- range(x)
  b <- seq(r[1], r[2], length=2*breaks+1)
  brk <- b[0:breaks*2+1]
  mid <- b[1:breaks*2]
  brk[1] <- brk[1]-0.01
  k <- cut(x, breaks=brk, labels=FALSE)
  mid[k]
}

ビンの区切りと中間点を取得するには、おそらくもっと良い方法があります。あまり難しく考えていませんでした。

この回答は Joshua のものとは異なることに注意してください。his は各ビンのデータの中央値を示し、これは各ビンの中心を示します。

> head(cut2(x,3))
[1] 16.666667  3.333333 16.666667  3.333333 16.666667 16.666667
> head(ave(x, cut(x,3), FUN=median))
[1] 18  2 18  2 18 18
于 2011-05-06T20:42:03.903 に答える
7

ave次のように使用します。

set.seed(21)
x <- sample(0:20, 100, replace=TRUE)
xCenter <- ave(x, cut(x,3), FUN=median)
于 2011-05-06T19:40:04.600 に答える
1

smart_cutパッケージから使用できますcutr

devtools::install_github("moodymudskipper/cutr")
library(cutr)

@Joshua のサンプル データを使用する:

間隔ごとの中央値(順序付けられた要因であることを除いて、@ Joshuaと同じ出力):

smart_cut(x,3, "n_intervals", labels= ~ median(.))
# [1] 18 2  18 2  18 18 ...
# Levels: 2 < 11 < 18

各間隔の中心(順序付けられた因子であることを除いて@Aaronと同じ出力):

smart_cut(x,3, "n_intervals", labels= ~ mean(.y))
# [1] 16.67 3.333 16.67 3.333 16.67 16.67 ...
# Levels: 3.333 < 10 < 16.67

間隔ごとの値の平均:

smart_cut(x,3, "n_intervals", labels= ~ mean(.))
# [1] 17.48 2.571 17.48 2.571 17.48 17.48 ...
# Levels: 2.571 < 11.06 < 17.48

labelsは と同じように文字ベクトルにすることがbase::cut.defaultできますが、ここにあるように、2 つのパラメーターの関数にすることもできます。1 つ目はビンに含まれる値で、2 つ目はビンのカット ポイントです。

cutr と smart_cut の詳細

于 2018-10-05T22:15:23.967 に答える