将多个分类变量合并为一个虚拟变量

6

我有三个分类变量

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

我希望将它们合并为一个具有3x3x2级别的虚拟变量。有没有快速的方法可以做到这一点?我的原始数据集中有大约10个变量,每个变量都有多个级别。
基本上,我要求与此问题完全相反。 从分类变量创建新的虚拟变量列 非常感谢 EC

5
"interaction" 与 "model.matrix" 的配合使用? - Ben Bolker
你能提供一个例子吗? - aatrujillob
也许@BenBolker应该把那个发表为答案...? - joran
1个回答

6

我不确定你是否需要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
相对于“粘贴”,“交互”也很好,因为它可以为两个因素的所有可能组合产生级别,即使这些组合在当前数据中不存在。 - Josh O'Brien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接