多列之间的R多热编码

问题描述 投票:2回答:2

我的数据是形状

Event Id Var1 Var2 Var3
1      a   x    w    y
2      a   z    y    w
3      b   x    y    q

考虑到Var1,Var2和Var3中出现的所有值,我需要为表中的每一行创建多热编码向量。意味着所需的输出将是:

Event Id  x  y  z  w  q
1      a  1  1  0  1  0
2      a  0  1  1  1  0
3      b  1  1  0  0  1

这意味着我保持初始数据集的行数相同,我只为每行添加一些列,这些列等于Var 1,Var 2和Var3中的所有唯一因子。

我尝试了所有可以想到的方法,但到目前为止似乎没有任何工作......

任何的想法?

r one-hot-encoding dummy-variable
2个回答
1
投票

你可以使用data.table -

dt <- read.table(text="Event Id Var1 Var2 Var3
1      a   x    w    y
2      a   z    y    w
3      b   x    y    q",header=T)

setDT(dt)
dcast(setDT(melt(dt,id.vars = c("Event","Id")))[,ind:=1],Event+Id~value,value.var = "ind",fill=0)

输出 -

   Event Id Var1 Var2 Var3 q w x y z
1:     1  a    1    1    1 0 1 1 1 0
2:     2  a    1    1    1 0 1 0 1 1
3:     3  b    1    1    1 1 0 1 1 0

1
投票

我们可以将gather变成'长'格式,然后做一个spread

library(tidyverse)
gather(df1, key, val, Var1:Var3) %>%
   mutate(n = 1) %>%
   select(-key) %>% 
   spread(val, n, fill = 0)

或者以紧凑的方式

library(qdapTools)
cbind(df1[1:2], +(mtabulate(df1[-(1:2)]) > 0))
© www.soinside.com 2019 - 2024. All rights reserved.