web-dev-qa-db-ja.com

2レベルの因子をRのバイナリ値0/1に変換する

genderという変数があり、バイナリカテゴリ値は「female」/「male」です。回帰分析で使用できるように、型を整数0/1に変更したいと思います。つまり、値「female」と「male」を1と0にマップする必要があります。

> str(gender)
gender : Factor w/ 2 levels "female","male":  1 1 1 0 0 0 0 1 1 0 ...
> gender[1]
[1] female

要素をクエリしたときにint値1を取得するように、性別変数タイプを変換したいと思います。

> gender[1]
[1] 1
8
user2093989

@Dasonの回答に加えて、次のことに注意してください...

test <- c("male","female")

as.factor(test)
#[1] male   female
#Levels: female male

...参照グループ(1)としてfemaleを返し、比較グループ(2)としてmaleを返します。

逆に回転させるには、次のことを行う必要があります...

factor(test,levels=c("male","female"))
#[1] male   female
#Levels: male female

@mariusが指摘しているように、contrastsを使用すると、回帰モデルでどのように機能するかがわかります。

contrasts(as.factor(test))
#       male
#female    0
#male      1

contrasts(factor(test,levels=c("male","female")))
#       female
#male        0
#female      1
14
thelatemail

因数に変換し、残りはRに任せます。 Rを使用する場合、ダミー変数を明示的に作成する必要はありません。

11
Dason

これを実際に行っている場合は、@ Dasonのアドバイスに絶対に従う必要があります。あなたがクラスを教えていて、インジケーター変数を示したいと仮定します( この質問 のおかげで):

_dat <- data.frame(gender=sample(c("male", "female"), 10, replace=TRUE))

model.matrix(~gender, data=dat)

   (Intercept) gendermale
1            1          1
2            1          0
3            1          1
4            1          0
5            1          1
6            1          1
7            1          1
8            1          0
9            1          0
10           1          1
attr(,"assign")
[1] 0 1
attr(,"contrasts")
attr(,"contrasts")$gender
[1] "contr.treatment"
_

インターセプトが必要ない場合は、代わりにmodel.matrix(~gender -1 , data=dat)を使用してください。

6
sebastian-c