为具有相同级别的不同因子创建虚拟变量

时间:2016-11-11 12:59:21

标签: r categorical-data r-factor

我有一个数据集,其中主要包含我想要格式化的分类变量(因子)。 数据集目前的格式如下:

    Obs X1 X2 X3 X4 ... X50
    1   A  B  C  D
    2   B  A  D  E
    3   B  C  D  A

然而,X1和X2的A应该是相同的,即X1和X2可以被认为是首先检测到的因素。我的想法是使用假人制定数据集;

    Obs A B C D ...
    1   1 1 1 1 ...
    2   1 1 0 1 ...
    3   1 1 1 1 ...

我尝试解决方案的方法是:我已将所有分类变量分离到data.frame df中,然后尝试为所有因子的每个级别创建虚拟变量。

for (i in 1:ncol(df)){
    for(level in df[,i]){
        df2[paste("", level, sep="")] = ifelse(i == level, 1, 0)
    }
}

但是,当我尝试运行此代码时R似乎冻结了 - 有什么理由说明为什么它不应该工作? 有没有人有任何建议可以更有效地处理这个问题?

1 个答案:

答案 0 :(得分:0)

如果要快速创建虚拟变量,请使用Matrix库创建稀疏矩阵。如果分类变量尚未使用data$X1<-as.factor(data$X1)

,则需要将其转换为因子
library(Matrix)
 f <- as.formula(DependedntVar~  + X1
                  + X2
                  + X3..etc)

  # transform dataframe to spareMatrix
  x <- model.matrix(f, data)
  y <- as.matrix(DependedntVar, ncol=1)

现在您可以使用稀疏矩阵x对y进行建模,其中y是包含因变量的一列Matrix,x是稀疏矩阵,其中因子已转换为dummay变量。

此外,你需要注意X1和X2之间的自相关,因为它会从你说它们100%相关的内容中看出来