首页 > 解决方案 > 将虚拟变量转换为分类变量

问题描述

这是我的数据框

data<-data.frame(
ID=c(1:8),
Diag1=c(1,0,1,0,1,0,1,0),
Diag2=c(0,1,0,1,0,0,1,0),
Diag3=c(0,0,0,1,0,1,1,0),
Multiple.Diag=c(0,0,1,1,0,0,1,0)
)

我有不同诊断的患者,其中一些有多种诊断。这些诊断是虚拟变量,需要转换为分类变量。如果病人有Mult.diag==1,他的诊断将是Multiple.diag,否则他的诊断将是Diag1Diag2或者Diag3。如果患者的所有变量都为 0,则诊断结果为"Other"

这是我想要的:

  ID     Diagnosis
1  1         Diag1
2  2         Diag2
3  3 Multiple.Diag
4  4 Multiple.Diag
5  5         Diag1
6  6         Diag3
7  7 Multiple.Diag
8  8         Other

标签: rdplyrcategorical-datadummy-variable

解决方案


您可以apply()像这样使用内置功能。您可以将结果添加到原始data数据或保存在新数据框中。该函数myfunc根据您提到的方向提取变量的名称进行处理。这里的代码:

#Code
myfunc <- function(x)
{
  y <- names(x)[max(which(x==1))]
  if(is.na(y))
  {
    y <- 'Others'
  }
  return(y)
}
#Add var
data$Var <- apply(data[,-1],1,myfunc)

输出:

  ID Diag1 Diag2 Diag3 Multiple.Diag           Var
1  1     1     0     0             0         Diag1
2  2     0     1     0             0         Diag2
3  3     1     0     0             1 Multiple.Diag
4  4     0     1     1             1 Multiple.Diag
5  5     1     0     0             0         Diag1
6  6     0     0     1             0         Diag3
7  7     1     1     1             1 Multiple.Diag
8  8     0     0     0             0        Others

推荐阅读