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

问题描述 投票:0回答:1

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

    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似乎冻结了 - 有什么理由说明为什么这不起作用?有没有人有任何建议可以更有效地处理这个问题?

r categorical-data r-factor
1个回答
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%相关

© www.soinside.com 2019 - 2024. All rights reserved.