我有一个数据集,其中一堆分类变量被转换为虚拟变量(使用了所有类,而不是 n-1),而有些则没有。我试图在一个列中重新编码它们。
例如
Q1.1 Q1.2 Q1.3 Q1.NA Q2 Q3.1 Q3.2
1 0 0 0 3 0 1
0 1 0 0 4 1 0
0 0 1 0 2 0 1
有没有一种简单的方法可以将其转换为:
Q1 Q2 Q3
1 3 2
2 4 1
3 2 2
现在我只是使用
strsplit()
(因为所有虚拟变量名称都包含 '.'
)和几个循环,但感觉应该有更好的方法。有什么建议么? 最佳答案
不久前我写了一个函数来做这种事情。
MultChoiceCondense<-function(vars,indata){
tempvar<-matrix(NaN,ncol=1,nrow=length(indata[,1]))
dat<-indata[,vars]
for (i in 1:length(vars)){
for (j in 1:length(indata[,1])){
if (dat[j,i]==1) tempvar[j]=i
}
}
return(tempvar)
}
如果您的数据名为
Dat
,则:Dat$Q1<-MultChoiceCondense(c("Q1.1","Q1.2","Q1.3"),Dat)