目的 連続変数データの度数分布表を作成したりクロス集計するとき,いくつかの区間に区切ってカテゴリーデータとして分析しなくてはならない。
カテゴリーデータにするときには cut 関数を使う訳であるが,結構面倒である。そこで糖衣を着せたラッパー関数を作っておく。 使用法 Recode(x, arg1, arg2) 引数 x 連続変数データベクトル 第1の用法(カッティングポイントと,区間のラベルを指定する) arg1 データを区切る数値ベクトル。下のような関係で,n 個のベクトルで n+1 個の区間に区切られる 最小値 区切り値1 値 区切り値2 … 値 区切り値n 最高値 区切り値は区間の左端に含まれる arg2 区切られた n+1 個の区間に付けるラベルベクトル 第2の用法(区間の最小値と区間幅を指定する) arg1 最小値が含まれる区間の左限界値 区間の左限界値が区間に含まれる arg2 区間幅 ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/recode.R", encoding="euc-jp") # 連続変数データをカテゴリーデータに変換 Recode <- function( x, # 連続変数データベクトル arg1, arg2) # 二通りの意味を持つ { if (length(arg1) == 1 && length(arg2) == 1) { # arg1: 最小値が含まれる区間の左限界値 return(factor(floor((x-arg1)/arg2)*arg2+arg1)) # arg2: 区間幅 } else if (length(arg1) == length(arg2)-1) { # arg1: カッティングポイント cut(x, breaks=c(-Inf, arg1, Inf), right=FALSE, labels=arg2) # arg2: 区切られた区間のラベル } else { stop("区切り値の個数は,ラベルの数よりちょうど 1 だけ小さいはずです") } } 使用例 y <- 0:10 Recode(y, c(4,7), c("lo", "mid", "hi")) Recode(y, 0, 3) 結果 > y <- 0:10 > Recode(y, c(4,7), c("lo", "mid", "hi")) [1] lo lo lo lo mid mid mid hi hi hi hi Levels: lo mid hi > Recode(y, 0, 3) [1] 0 0 0 3 3 3 6 6 6 9 9 # 各区間は「0 以上 3 未満」のような意味 Levels: 0 3 6 9