カテゴリーデータの再カテゴリー化 Last modified: Aug 31, 2006
目的
カテゴリーデータの再カテゴリー化を行う。
R に用意されている factor 関数の labels 引数を指定することで同じことができる(このページの末尾を参照)が,ちょっと注意が必要なので,間違いが少ない(?)方法を紹介する。
使用法
recode2(x, y)
引数
x 連続変数データベクトル
y 再カテゴリー化を定義する n×3 行列
i 行の 1 列目 2 列目を y[i,1], y[i,2] としたとき,
y[i,1] ≦ x ≦ y[i,2] である x を y[i,3] に置き換える
ソース
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/recode2.R", encoding="euc-jp")
# カテゴリーデータの再カテゴリー化
recode2 <- function( x, # 連続変数データベクトル
y) # 再カテゴリー化を定義する n×3 行列
# i 行の 1 列目 2 列目を y[i,1], y[i,2] としたとき,
# y[i,1] ≦ x ≦ y[i,2] である x を y[i,3] に置き換える
{
if (ncol(y) != 3) {
stop("y は3列でなければいけない")
}
n <- nrow(y)
for (i in 1:n) {
for (j in 1:n) {
if (i != j && ((y[i,1] <= y[j,1] && y[j,1] <= y[i,2]) || (y[i,1] <= y[j,2] && y[j,2] <= y[i,2]))) {
stop("区間情報に重複があります")
}
}
}
sapply(x, function(z) ifelse(is.na(z), NA, y[,3][y[,1] <= z & z <= y[,2]]))
}
使用例
y <- matrix(c(1,3,1, 4,7,5, 8,10,9), byrow=TRUE, nc=3)
x <- c(7, 4, 3, 1, 8, 6, 5, 5, 8, 1, 1, 10, 7, 6, 3, 5, 10, 8, 3, 3)
recode2(x, y)
結果
> x
[1] 7 4 3 1 8 6 5 5 8 1 1 10 7 6 3 5 10 8 3 3
> y
[,1] [,2] [,3]
[1,] 1 3 1
[2,] 4 7 5
[3,] 8 10 9
> recode2(x, y)
[1] 5 5 1 1 9 5 5 5 9 1 1 9 5 5 1 5 9 9 1 1
直前のページへ戻る
E-mail to Shigenobu AOKI