2013-02-21 29 views
5

Mam zmienną o nazwie gender z binarnymi kategorycznymi wartościami "female"/"male". Chcę zmienić jego typ na liczby całkowite 0/1, aby móc go użyć w analizie regresji. tj Chcę wartości „żeńskie” i „męski”, aby być odwzorowywane na 1 i 0.Konwersja współczynnika z 2 poziomami na wartości binarne 0/1 w R

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

Chciałbym przekonwertować typ zmiennej płci, tak aby uzyskać int wartość 1, gdy kwerendy elementu, tj

> gender[1] 
[1] 1 
+0

Witamy w SO! może lepiej pokaż co próbujesz. – agstudy

+3

co z 'gender <- ifelse (gender ==" female ", 1,0)'? – r2d2oid

Odpowiedz

9

Konwersja do czynnika i niech R zajmie się resztą. Nigdy nie powinno się zadbać o wyraźnie tworzenia zmiennych binarnych przy użyciu R.

+4

+1 o wiele lepiej, aby rozwiązać prawdziwy problem, a nie dokładny problem! – mnel

13

Jako dodatek do @ odpowiedź Dason jest pamiętać, że ...

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

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

... powróci female jako grupy referencyjnej (1) i male jako grupy porównawczej (2),

aby kręcić w drugą stronę, trzeba by było zrobić ...

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

jak zauważa @marius, usi ng contrasts pokaże, jak to będzie działać w modelu regresji:

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

contrasts(factor(test,levels=c("male","female"))) 
#  female 
#male  0 
#female  1 
+2

Lub, aby zobaczyć jeszcze wyraźniej, w jaki sposób poziomy będą traktowane w modelu regresji, 'kontrasty (czynnik (test)) – Marius

6

Jeśli robisz to na poważnie, należy bezwzględnie postępować @ poradę Dason użytkownika. Mam zamiar założyć, że uczysz klasę i chcemy pokazać zmienne wskaźnikowe (z podziękowaniami do this question):

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" 

Jeśli nie chcesz, aby przechwycić, zamiast używać model.matrix(~gender -1 , data=dat).