2011-12-07 36 views
5

Tôi có 3 biến phân loạiKết hợp nhiều biến phân loại trong một biến giả

agegroup{<20,20-30,>03}  
disease.level{0,1,2}, 
performance{<60, >=60} 

và tôi muốn kết hợp chúng thành một biến dummy với 3x3x2 cấp. Có cách nào nhanh chóng để làm điều này không? Các tập dữ liệu ban đầu của tôi có khoảng 10 biến với nhiều cấp độ trong mỗi tập dữ liệu.

Về cơ bản tôi xin hoàn toàn trái ngược của câu hỏi này Create new dummy variable columns from categorical variable

Thanks a lot EC

+5

'tương tác' theo sau là' model.matrix'? –

+0

bạn có thể cung cấp một ví dụ không? – aatrujillob

+0

Có lẽ @BenBolker nên đăng câu trả lời đó ...? – joran

Trả lời

5

Tôi không chắc liệu bằng cách "biến dummy" bạn muốn 0/1 biến chỉ số (trong mà bạn sẽ có 18 biến giả) hoặc cho dù bạn muốn có một yếu tố duy nhất với 18 cấp độ. Âm thanh như sau. (Trên thực tế, paste sẽ làm việc cũng như interaction, mặc dù interaction là thêm một chút tự mô tả.)

> ff <- expand.grid(agegroup=factor(c("<20","20-30",">30")), 
     disease.level=factor(0:2),performance=factor(c("<60",">=60"))) 
> combfac <- with(ff,interaction(agegroup,disease.level,performance)) 
> combfac 
[1] <20.0.<60 20-30.0.<60 >30.0.<60 <20.1.<60 20-30.1.<60 
[6] >30.1.<60 <20.2.<60 20-30.2.<60 >30.2.<60 <20.0.>=60 
[11] 20-30.0.>=60 >30.0.>=60 <20.1.>=60 20-30.1.>=60 >30.1.>=60 
[16] <20.2.>=60 20-30.2.>=60 >30.2.>=60 
18 Levels: <20.0.<60 20-30.0.<60 >30.0.<60 <20.1.<60 20-30.1.<60 ... >30.2.>=60 

Nếu bạn muốn sử dụng tất cả các biến trong khung dữ liệu để tạo sự tương tác bạn có thể sử dụng do.call(interaction,ff).

Nếu bạn muốn các biến giả bạn sẽ làm model.matrix(~combfac-1) để tải chúng.

+2

Tương đối với 'dán',' tương tác' cũng có thể tốt đẹp ở chỗ nó tạo ra các mức cho tất cả các kết hợp có thể có của hai yếu tố, ngay cả những yếu tố không xuất hiện trong dữ liệu hiện tại. –

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