ケイグォ(Kaggle)が俺にまだ知らないRの機能を使えと囁いている

cut関数(連続データの離散値化)

連続値をとるデータを適当な区間(breaksで指定)で分割して、factor化してくれる。

> x <- rnorm(10)
> x
 [1]  0.07927061  0.81770466  0.21693545 -0.95629685  1.77248104 -1.29774920 -1.05448409 -0.55145272  2.30786460
[10] -0.74214539
> cut(x, breaks=c(-10,-3,0,3,5,10))
 [1] (0,3]  (0,3]  (0,3]  (-3,0] (0,3]  (-3,0] (-3,0] (-3,0] (0,3]  (-3,0]
Levels: (-10,-3] (-3,0] (0,3] (3,5] (5,10]

factor型を数値型に変換

factor型は単純にas.numericしても正しい数値が割り当てられないので、以下の例にあるように「as.numeric(levels(x))[x]」とするとよい。

> x <- as.factor(c(1,4,1,1,2))
> x
[1] 1 4 1 1 2
Levels: 1 2 4
> as.numeric(x)
[1] 1 3 1 1 2
> as.numeric(levels(x))[x]
[1] 1 4 1 1 2

昔書いたかも。