R многократное кодирование среди нескольких столбцов - PullRequest
2 голосов
/ 21 марта 2019

Мои данные имеют форму

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.

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

Есть идеи?

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Вы можете использовать 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)

output-

   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 голос
/ 21 марта 2019

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