我有一个数据集,其中一堆分类变量被转换为虚拟变量(使用了所有类,而不是 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)

10-06 14:22
查看更多