R将分类数据更改为虚拟变量

时间:2014-08-20 19:26:30

标签: r categorical-data model.matrix

我有一个多变量数据框,并希望将内部的分类数据转换为虚拟变量,我使用的是model.matrix,但它不太有效。请参考以下示例:

age = c(1:15)                                                          #numeric
sex = c(rep(0,7),rep(1,8)); sex = as.factor(sex)                       #factor
bloodtype = c(rep('A',2),rep('B',8),rep('O',1),rep('AB',4));bloodtype = as.factor(bloodtype)         #factor
bodyweight = c(11:25)                                                  #numeric

wholedata = data.frame(cbind(age,sex,bloodtype,bodyweight))

model.matrix(~.,data=wholedata)[,-1]

我没有使用model.matrix(~age+sex+bloodtype+bodyweight)[,-1]的原因是因为这只是一个玩具示例。在真实数据中,我可能有数十或数百列。我不认为在这里键入所有变量名称是个好主意。

由于

1 个答案:

答案 0 :(得分:1)

cbind正在弄乱事情。它会将您的因子转换为数字,然后model.matrix无法正确解释。

如果您只是wholedata = data.frame(age,sex,bloodtype,bodyweight),那就没有问题。

cbind返回一个矩阵,在矩阵中,所有内容都必须具有相同的类型。这个例子的结果是因子被转换为整数(这是一个因子的基础表示),然后矩阵的类型是整数。

尝试

wholedata = cbind(age,sex,bloodtype,bodyweight)
is.integer(wholedata) ## TRUE
is.factor(wholedata[,2]) ## FALSE

wholedata = data.frame(age,sex,bloodtype,bodyweight)
is.integer(wholedata) ## FALSE
is.factor(wholedata[,2]) ## TRUE