【问题标题】:R multi-hot encoding among multiple columns多列之间的R多热编码
【发布时间】:2019-08-12 18:35:32
【问题描述】:

我的数据在形状中

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


    【解决方案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))
    

    【讨论】:

      【解决方案2】:

      你可以使用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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-11
        • 2017-02-08
        • 1970-01-01
        • 2023-03-06
        • 2019-09-06
        • 1970-01-01
        相关资源
        最近更新 更多