連続変数データをカテゴリーデータに変換 Last modified: Mar 30, 2006
目的
連続変数データの度数分布表を作成したりクロス集計するとき,いくつかの区間に区切ってカテゴリーデータとして分析しなくてはならない。
カテゴリーデータにするときには 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
直前のページへ戻る
E-mail to Shigenobu AOKI