カット関数を使用してデータを等しいビンに分割していますが、それは機能しますが、値を返す方法に満足していません。私が必要とするのは、上端と下端ではなく、ビンの中心です。
も使用しようとしましたがcut2{Hmisc}
、これにより各ビンの中心が得られますが、同じ長さではなく、同じ数の観測を含むビンのデータ範囲が分割されます。
誰にもこれに対する解決策がありますか?
カット関数を使用してデータを等しいビンに分割していますが、それは機能しますが、値を返す方法に満足していません。私が必要とするのは、上端と下端ではなく、ビンの中心です。
も使用しようとしましたがcut2{Hmisc}
、これにより各ビンの中心が得られますが、同じ長さではなく、同じ数の観測を含むビンのデータ範囲が分割されます。
誰にもこれに対する解決策がありますか?
このようなもので、ブレークとラベルを自分で作成するのはそれほど難しくありません。ここでは中点が単一の数値であるため、実際にはラベル付きの因子を返すのではなく、数値ベクトルを返します。
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
ave
次のように使用します。
set.seed(21)
x <- sample(0:20, 100, replace=TRUE)
xCenter <- ave(x, cut(x,3), FUN=median)
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 つ目はビンのカット ポイントです。