2013-02-21 38 views
5

Tôi có một biến, được gọi là gender, với giá trị phân loại nhị phân "nữ"/"nam". Tôi muốn thay đổi kiểu của nó thành số nguyên 0/1 để tôi có thể sử dụng nó trong phân tích hồi quy. tức là tôi muốn các giá trị "nữ" và "nam" được ánh xạ tới 1 và 0.Chuyển đổi hệ số có 2 mức thành giá trị nhị phân 0/1 trong R

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

Tôi muốn chuyển đổi giới tính biến dạng vì vậy mà tôi có được int giá trị 1 khi tôi truy vấn một yếu tố, ví dụ:

> gender[1] 
[1] 1 
+0

Chào mừng bạn đến với SO! có lẽ nó nên được hiển thị tốt hơn những gì bạn đã thử. – agstudy

+3

điều gì về 'giới tính <- ifelse (giới tính ==" nữ ", 1,0)'? – r2d2oid

Trả lời

9

Chuyển đổi thành yếu tố và để R chăm sóc phần còn lại. Bạn không bao giờ nên phải chăm sóc của việc tạo ra một cách rõ ràng các biến giả khi sử dụng R.

+4

+1 tốt hơn để giải quyết vấn đề thực sự, chứ không phải vấn đề chính xác! – mnel

13

Như một sự bổ sung cho câu trả lời @ Dason của, lưu ý rằng ...

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

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

... sẽ trở lại female như nhóm tham khảo (1) và male như nhóm so sánh (2),

để quay nó theo cách khác, bạn sẽ cần phải làm ...

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

như ghi chú @marius, USI ng contrasts sẽ cho bạn thấy làm thế nào nó sẽ làm việc trong mô hình hồi quy:

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

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

Hoặc, để xem rõ hơn mức độ sẽ được xử lý như thế nào trong mô hình hồi quy, 'tương phản (yếu tố (kiểm tra))' – Marius

6

Nếu bạn đang làm điều này cho thực tế, bạn hoàn toàn nên làm theo lời khuyên @ Dason của. Tôi sẽ cho rằng bạn đang dạy một lớp và muốn chứng minh biến chỉ số (với nhờ 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" 

Nếu bạn không muốn chặn, sử dụng model.matrix(~gender -1 , data=dat) để thay thế.

Các vấn đề liên quan