【问题标题】:How to one-hot encode multiple features, that each have multiple labels如何对多个特征进行一次热编码,每个特征都有多个标签
【发布时间】:2022-08-04 11:31:14
【问题描述】:

我的数据有几个分类特征,每条记录有多个标签,分布在多行上。

myDf <- data.frame(myGroup = c(\"A\", \"B\", \"B\", \"C\", \"C\", \"C\"),
                   myFruit = as.factor(c(\"apple\", \"apple\", \"banana\", \"apple\", \"lime\", \"lemon\")),
                   myCode = as.factor(c(\"AAA\", \"AAA\", \"CCC\", \"AAA\", \"BBB\", \"CCC\")))
myDf
myGroup myFruit myCode
      A   apple    AAA
      B   apple    AAA
      B  banana    CCC
      C   apple    AAA
      C    lime    BBB
      C   lemon    CCC

预期的输出如下所示:

myGroup apple banana lemon  lime   AAA   BBB   CCC
A           1      0     0     0     1     0     0
B           1      1     0     0     1     0     1
C           1      0     1     1     1     1     1

我怎样才能对这个多标签数据进行一次热编码?

我包括一个自我回答,但我怀疑有更好的方法来做到这一点。

例如。有 20 个字段需要编码,我应该使用重复 mutate/spread 20 次吗?

    标签: r one-hot-encoding


    【解决方案1】:

    R 中的出色答案为基础,例如:One Hot Encoding From Multiple Rows in R

    并在Python 喜欢:How could I do one hot encoding with multiple values in one cell?

    myDf %>% 
      mutate(n = 1)%>% 
      spread(myFruit, n, fill = 0, sep = "_") %>% 
      mutate(n = 1)%>% 
      spread(myCode, n, fill = 0, sep = "_") %>% 
      group_by(myGroup) %>% 
      summarise(across(.cols = everything(), max))
    
    myGroup myFruit_apple myFruit_banana myFruit_lemon myFruit_lime myCode_AAA myCode_BBB myCode_CCC
    A                   1              0             0            0          1          0          0
    B                   1              1             0            0          1          0          1
    C                   1              0             1            1          1          1          1
    

    【讨论】:

      猜你喜欢
      • 2022-04-26
      • 2016-05-27
      • 2020-01-05
      • 2019-05-30
      • 2022-01-20
      • 2017-01-07
      • 2019-04-28
      • 2018-07-17
      • 2016-12-30
      相关资源
      最近更新 更多