R многозадачное кодирование среди нескольких столбцов

#r #one-hot-encoding #dummy-variable

#r #однократное горячее кодирование #фиктивная переменная

Вопрос:

Мои данные находятся в форме

 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
  

Это означает, что я сохраняю одинаковое количество строк исходного набора данных, я только добавляю для каждой строки количество столбцов, равное всем уникальным коэффициентам среди переменных 1, 2 и 3.

Я перепробовал все подходы, которые мог придумать, но, похоже, пока ничего не работает..

Есть идея?

Ответ №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
  

Ответ №2:

Мы могли бы 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))