【发布时间】:2014-10-14 07:03:03
【问题描述】:
我有一个多变量数据框,想将里面的分类数据转换为虚拟变量,我使用了 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] 的原因是因为这只是一个玩具示例。在真实数据中,我可以有数十或数百列。我不认为在这里输入所有变量名是个好主意。
谢谢
【问题讨论】:
-
如果你想在你的虚拟矩阵中显示每个级别(包括参考),你可以使用
model.matrix(~ -1 + . , data=wholedata, contrasts.arg = lapply(wholedata[sapply(wholedata, is.factor)], contrasts, contrasts=FALSE))
标签: r categorical-data model.matrix