2013年5月18日土曜日

R言語のcut関数の使い方

R初心者として、cut関数がいまいち分かりにくかったので、ここで少しまとめておく。

■cut関数は何をする関数?
一言でいうと「数値データを、指定した分割基準でカテゴリに変換する関数」だ。
もう少し詳しくいうと、例えば英語の試験を行い各人の試験結果を
> x <- c(90, 55, 79, 80, 100)
とする。80点未満を「不合格」、80点以上を「合格」と分けるとすると、xの変数の内容を「合格、不合格、不合格, 合格、合格」と変換したfactor型のオブジェクトを返すのがcut関数だ。

■実際にcut関数を動かしてみる。
上記の例を実際にR上で行ったのが以下。
> x <- c(90, 55, 79, 80, 100)
> cut(x,breaks=c(0,80,100), labels=c("不合格","合格"), right = FALSE, include.lowest = TRUE)

[1] 合格   不合格 不合格 合格   合格  
Levels: 不合格 合格
点数が先ほどの基準に従ってカテゴリ(合格、不合格)に変換されているのが分かる。

■right = FALSEのオプションは?
先のcut使用例で「right=FALSE」のオプションをしている。この説明をしなければならない。
cutのデフォルト動作は、例えばbreaks=c(0,80,100)と指定した場合、
  • (0,80]の区間を不合格
  • (80,100]の区間を合格
とカテゴリ分けする。
ここで丸括弧は開区間、角括弧は閉区間を示す。でも今回は
80点未満を不合格、80点以上を合格としたいから、
  • [0,80)の区間を不合格
  • [80,100)の区間を合格 (注:ここで100がカテゴリ分けに入らないのは後述)
であるべき。このように区間を分けるためにright = FALSE とする。

■include.lowest = TRUEのオプションは?
先のright=FALSEだけでは「100」がカテゴリ分けに含まれない。そこでカテゴリ分けの末端の開区間を閉区間にし、今回の例では100をカテゴリに含むようにするのが、このオプション。

「right = FALSE」「include.lowest = TRUE」を指定することで、今回我々が望む
  • [0,80)の区間を不合格
  • [80,100]の区間を合格
というカテゴリ分けが実現できる。





2 件のコメント:

  1. ほかのよりわかりやすかったです

    返信削除
  2. 阿部葉月さん、
    コメントありがとうございます!
    お役にたてたなら嬉しいです!

    返信削除