在一个虚拟变量中组合多个分类变量

ECI*_*CII 6 r

我有3个分类变量

agegroup{<20,20-30,>03}    
disease.level{0,1,2},  
performance{<60, >=60}
Run Code Online (Sandbox Code Playgroud)

我希望将它们组合成一个具有3x3x2级别的虚拟变量.有没有快速的方法来做到这一点?我的原始数据集有大约10个变量,每个变量都有多个级别.

基本上我要求与此问题完全相反的是 从分类变量创建新的虚拟变量列

非常感谢EC

Ben*_*ker 6

我不确定"虚拟变量"是否需要0/1指标变量(其中你将有18个虚拟变量),或者你是否想要一个具有18个等级的单个因子.听起来像后者.(实际上,虽然有点自我描述,但paste也会起作用.)interactioninteraction

> 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
Run Code Online (Sandbox Code Playgroud)

如果要使用数据框中的所有变量来创建可以使用的交互do.call(interaction,ff).

如果你确实想要虚拟变量,你可以做到model.matrix(~combfac-1).

  • 相对于`paste`,`interaction`也可以很好,因为它为两个因子的所有可能组合产生水平,即使是那些没有出现在当前数据中的因子. (2认同)