分位数に従ってデータのカテゴリー化(連続値→離散値)する方法。データの情報量を落とす操作なので使う場面は相当限られる(なんらかの理由で表ではなくグラフを作成する場合など?)
[quantile]を使ったデータのカテゴリー化
RのデフォルトデータセットirisのSepal.Length(がく片の長さ)を四分位数で区切ってみる。quantile関数で分位数を決める。
> data(iris) > qa <- quantile(iris$Sepal.Length,c(0,0.25,0.5,0.75,1.0)) > qa 0% 25% 50% 75% 100% 4.3 5.1 5.8 6.4 7.9
0%は最小値、100%は最大値。
次にqaと定義した分位数に従ってデータをカテゴリー化する。cut関数を使う。
> iris$Sepal.Length_q <- cut(iris$Sepal.Length,qa, + labels = c("0-25%","25-50%","50-75%","75-100%")) > summary(iris$Sepal.Length_q) 0-25% 25-50% 50-75% 75-100% NA's 40 39 35 35 1
4つの区間に含まれるサンプル数が表示される。NAが1となっているのは左側が開区間(左開右閉区間)となっているため。include.lowestオプションを使えばよい。
> iris$Sepal.Length_q <- cut(iris$Sepal.Length,qa, + labels = c("0-25%","25-50%","50-75%","75-100%"), + include.lowest = TRUE) > summary(iris$Sepal.Length_q) 0-25% 25-50% 50-75% 75-100% 41 39 35 35
[quantile]を使わずに開・閉区間の違いをみてみる
あらかじめ分位数を決めておくとquantileを使わなくてもよい。
> breaks = c(4.3,5.1,5.8,6.4,7.9) > br <- cut(iris$Sepal.Length,breaks) > summary(br) (4.3,5.1] (5.1,5.8] (5.8,6.4] (6.4,7.9] NA's 40 39 35 35 1
最初の区間の左側が開区間になっている。
> br2 <- cut(iris$Sepal.Length,breaks,include.lowest = TRUE) > summary(br2) [4.3,5.1] (5.1,5.8] (5.8,6.4] (6.4,7.9] 41 39 35 35
include.lowestオプションを有効にすると閉区間となるため、NAも分位数の範囲に含まれる。