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