如何从互斥的虚拟变量(取值0/1)中创建分类变量?
基本上,我正在寻找与此解决方案(https://subscription.packtpub.com/book/big_data_and_business_intelligence/9781787124479/1/01lvl1sec22/creating-dummies-for-categorical-variables)完全相反的地方。
将不胜感激的是基本的R解决方案(没有dplyr,tibble,tidyverse等)。>>
例如,从这里开始:
dummy.df<-structure(c(1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L), .Dim = c(10L, 4L ), .Dimnames = list(NULL, c("State.NJ", "State.NY", "State.TX", "State.VA"))) > dummy.df State.NJ State.NY State.TX State.VA [1,] 1 0 0 0 [2,] 0 1 0 0 [3,] 1 0 0 0 [4,] 0 0 0 1 [5,] 0 1 0 0 [6,] 0 0 1 0 [7,] 1 0 0 0 [8,] 0 0 0 1 [9,] 0 0 1 0 [10,] 0 0 0 1
我想转到此处
cat.var<-structure(list(state = structure(c(1L, 2L, 1L, 4L, 2L, 3L, 1L,
4L, 3L, 4L), .Label = c("NJ", "NY", "TX", "VA"), class = "factor")), class = "data.frame", row.names = c(NA,
-10L))
> cat.var
state
1 NJ
2 NY
3 NJ
4 VA
5 NY
6 TX
7 NJ
8 VA
9 TX
10 VA
如何从互斥的虚拟变量(取值0/1)中创建分类变量?基本上,我正在寻找与此解决方案完全相反(https://subscription.packtpub ....
# toy data
df <- data.frame(a = c(1,0,0,0,0), b = c(0,1,0,1,0), c = c(0,0,1,0,1))
df$cat <- apply(df, 1, function(i) names(df)[which(i == 1)])
您可以做:
编辑:带有您的数据
您可以使用tidyr::gather
: