#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))