我有一个数据集,其中主要包含我想要格式化的分类变量(因子)。 数据集目前的格式如下:
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似乎冻结了 - 有什么理由说明为什么它不应该工作? 有没有人有任何建议可以更有效地处理这个问题?
答案 0 :(得分: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%相关的内容中看出来