【问题标题】:Combine multiple categorical variables in one dummy variable将多个分类变量合并到一个虚拟变量中
【发布时间】:2012-01-15 04:52:09
【问题描述】:

我有 3 个分类变量

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

我想将它们组合成一个 3x3x2 级别的虚拟变量。有什么快速的方法可以做到这一点吗?我的原始数据集大约有 10 个变量,每个变量都有多个级别。

基本上我问的是与这个问题完全相反的问题 Create new dummy variable columns from categorical variable

非常感谢 欧共体

【问题讨论】:

  • interaction 后跟 model.matrix ?
  • 你能举个例子吗?
  • 也许@BenBolker 应该将其发布为答案...?

标签: r


【解决方案1】:

我不确定“虚拟变量”是否需要 0/1 指示变量(其中您将有 18 个虚拟变量),或者您是否需要具有 18 个级别的单个因子。听起来是后者。 (实际上,pasteinteraction 一样好用,虽然 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) 获取它们。

【讨论】:

  • 相对于pasteinteraction 也可以很好,因为它为这两个因素的所有可能组合生成水平,即使是那些未出现在当前数据中的因素。
猜你喜欢
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 2020-08-02
  • 2022-12-02
  • 2015-08-02
相关资源
最近更新 更多