カテゴリーデータの再カテゴリー化     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

Made with Macintosh