如何将一个热编码变量转换为R中的单个因子

如何将一个热编码变量转换为R中的单个因子,r,one-hot-encoding,R,One Hot Encoding,在这篇文章中,他们讨论了如何对R中的单因子变量进行热编码。我想知道如何逆转这个问题,并从热编码某些属性的变量中获得单因子?这怎么样 库(dplyr) 这里有一个解决方案 第一个热编码carb mtcars$carb马自达RX40 0 #>马自达RX4 Wag 0 0 0 1 0 0 #>达特桑710100 #>大黄蜂4路100 #>大黄蜂运动队约0 1 0 0 0 0 #>勇敢的100 我们当然可以选择热编码变量 库(dplyr) df%>% 行() 突变(remade=which.max(c

在这篇文章中,他们讨论了如何对R中的单因子变量进行热编码。我想知道如何逆转这个问题,并从热编码某些属性的变量中获得单因子?

这怎么样

库(dplyr)
这里有一个解决方案

第一个热编码
carb

mtcars$carb马自达RX40 0
#>马自达RX4 Wag 0 0 0 1 0 0
#>达特桑710100
#>大黄蜂4路100
#>大黄蜂运动队约0 1 0 0 0 0
#>勇敢的100
我们当然可以选择热编码变量

库(dplyr)
df%>%
行()
突变(remade=which.max(c_跨(以“carb”开头))%>%
解组%>%
变异(重新制作=因子(重新制作))
#>#A tibble:32 x 7
#>carb1 carb2 carb3 carb4 carb6 carb8重新制作
#>           
#>  1     0     0     0     1     0     0 4     
#>  2     0     0     0     1     0     0 4     
#>  3     1     0     0     0     0     0 1     
#>  4     1     0     0     0     0     0 1     
#>  5     0     1     0     0     0     0 2     
#>  6     1     0     0     0     0     0 1     
#>  7     0     0     0     1     0     0 4     
#>  8     0     1     0     0     0     0 2     
#>  9     0     1     0     0     0     0 2     
#> 10     0     0     0     1     0     0 4     
#>#……还有22行
在这里,它是一个功能,可以选择保留或删除一个热编码列a la@KM_83

冷编码%
解组%>%
突变({var}}:=因子({{var}}))
如果(!保留虚拟对象){
df%选择(-matches(粘贴0(编码的前缀,1:9)))
}
返回(df)
}
冷编码(df,“carb”)
#>#tibble:32 x 11
#>mpg气缸显示hp drat wt qsec与am齿轮carb
#>              
#>  1  21       6  160    110  3.9   2.62  16.5     0     1     4 4    
#>  2  21       6  160    110  3.9   2.88  17.0     0     1     4 4    
#>  3  22.8     4  108     93  3.85  2.32  18.6     1     1     4 1    
#>  4  21.4     6  258    110  3.08  3.22  19.4     1     0     3 1    
#>  5  18.7     8  360    175  3.15  3.44  17.0     0     0     3 2    
#>  6  18.1     6  225    105  2.76  3.46  20.2     1     0     3 1    
#>  7  14.3     8  360    245  3.21  3.57  15.8     0     0     3 4    
#>  8  24.4     4  147.    62  3.69  3.19  20       1     0     4 2    
#>  9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4 2    
#> 10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4 4    
#>#……还有22行

类似于
x@rawr的帖子作为答案?@rawr是的,你应该把它作为答案发布。这是一个极好的解决方案。