根据互斥的虚拟变量创建分类变量

问题描述 投票:1回答:4

如何从互斥的虚拟变量(取值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 ....

r dataframe categorical-data dummy-variable
4个回答
4
投票
# 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)])

2
投票

您可以做:


1
投票

编辑:带有您的数据


1
投票

您可以使用tidyr::gather

© www.soinside.com 2019 - 2024. All rights reserved.