2011-12-07 158 views
5

我有3個分類變量將多個分類變量在一個虛擬變量

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

,我想向他們3x3x2水平結合成一個虛擬變量。有沒有快速的方法來做到這一點?我的原始數據集有大約10個變量,每個變量都有多個級別。

基本上我詢問這個​​問題正好相反 Create new dummy variable columns from categorical variable

非常感謝 EC

+5

'interaction'隨後'model.matrix'? –

+0

你能提供一個例子嗎? – aatrujillob

+0

也許@BenBolker應該張貼,作爲一個答案......? – joran

回答

5

我不知道你是否通過「虛擬變量」希望0/1指標變量(以你將有18個虛擬變量),還是你想要一個具有18個等級的因子。聽起來像後者。如果你想使用所有變量的數據幀創建可以使用的交互(實際上,paste將工作以及interaction,雖然interaction是一個比較自我描述。)

> 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 

do.call(interaction,ff)

如果你確實想要的虛擬變量,你會做model.matrix(~combfac-1)得到它們。

+2

相對於'paste','interaction'也可以是很好的,因爲它產生了兩個因素的所有可能組合的水平,即使是那些沒有出現在本數據。 –

相關問題