[R]|范畴到伪变量的一种热编码

[R]|范畴到伪变量的一种热编码,r,categorical-data,R,Categorical Data,我需要创建一个新的数据框nDF,它对所有分类变量进行二值化,同时在数据框DF中保留所有其他变量。例如,我有以下特性变量:RACE(4种类型)和AGE,以及一个名为CLASS的输出变量 DF= 我得到的仍然是三个变量的DF,但是变量DF$RACE具有“对比度”属性 不过,我最终想要的是一个新的数据框架nDF,如上图所示,但是如果一个人有大约50个特征变量,其中超过五(5)个是分类变量,那么评估它可能会非常繁琐 dd <- read.table(text=" RACE AG

我需要创建一个新的数据框nDF,它对所有分类变量进行二值化,同时在数据框DF中保留所有其他变量。例如,我有以下特性变量:RACE(4种类型)和AGE,以及一个名为CLASS的输出变量

DF=

我得到的仍然是三个变量的DF,但是变量DF$RACE具有“对比度”属性

不过,我最终想要的是一个新的数据框架nDF,如上图所示,但是如果一个人有大约50个特征变量,其中超过五(5)个是分类变量,那么评估它可能会非常繁琐

dd <- read.table(text="
   RACE        AGE.BELOW.21     CLASS
   HISPANIC          0          A
   ASIAN             1          A
   HISPANIC          1          D
   CAUCASIAN         1          B",
  header=TRUE)


  with(dd,
       data.frame(model.matrix(~RACE-1,dd),
                  AGE.BELOW.21,CLASS))
 ##   RACEASIAN RACECAUCASIAN RACEHISPANIC AGE.BELOW.21 CLASS
 ## 1         0             0            1            0     A
 ## 2         1             0            0            1     A
 ## 3         0             0            1            1     D
 ## 4         0             1            0            1     B

请注意,当您有多个分类变量时,如果您想要为每个分类变量提供完整的虚拟变量集,那么您将不得不做一些有点棘手的事情。我想
cbind()
将单独的模型矩阵组合在一起,但我认为同时完成这一切还有一些技巧,我忘记了…

我一定会尝试您在这里建议的方法,并用cbind()探索更多。这真的很有帮助。如果我有更多的声誉,我会投票支持你的答案。我无法理解
~RACE-1
的含义?
RACE
表示根据治疗对比将分类变量转换为虚拟变量
-1
表示省略截取术语请注意,数字编码列必须存储为
字符
因子
,否则
模型。矩阵
将保持原样。如果您愿意使用包,可以使用中的one_hot()方法。 RACE.1 RACE.2 RACE.3 AGE (BELOW 21) CLASS Case 1 0 0 0 0 A Case 2 0 0 1 1 A Case 3 0 0 0 1 D Case 4 0 1 0 1 B
contrasts(DF$RACE) = contr.treatment(4)
dd <- read.table(text="
   RACE        AGE.BELOW.21     CLASS
   HISPANIC          0          A
   ASIAN             1          A
   HISPANIC          1          D
   CAUCASIAN         1          B",
  header=TRUE)


  with(dd,
       data.frame(model.matrix(~RACE-1,dd),
                  AGE.BELOW.21,CLASS))
 ##   RACEASIAN RACECAUCASIAN RACEHISPANIC AGE.BELOW.21 CLASS
 ## 1         0             0            1            0     A
 ## 2         1             0            0            1     A
 ## 3         0             0            1            1     D
 ## 4         0             1            0            1     B
 dd0 <- subset(dd,select=-CLASS)
 data.frame(model.matrix(~.-1,dd0),CLASS=dd$CLASS)