Фиктивный код / ​​Одно горячее кодирование переменных с менее чем 2 уровнями в R - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь фиктивно кодировать фрейм данных с переменными (числовой + коэффициент). Но model.matrix не будет применяться для переменных, имеющих уровни, превышающие 2.

Пример данных-

dt <- data.frame(A=c("1","1","1"),
                 B=c("0","1","1"),
                 C=c("5","6","7"),
                 id=c(1,2,3))

Желаемый вывод-

  A1 B0 B1 B2 C5 C6 C7 id
1  1  1  0  0  1  0  0  1
2  1  0  1  0  0  1  0  2
3  1  0  0  1  0  0  1  3

Мои попытки-

dt_res <- model.matrix(~.+0,dt)

Это прекрасно работает без постоянных переменных. Но у меня более 1000 переменных, и я не могу сделать это и сделать это.

Есть ли возможное решение с использованием dcast или melt или reshape.

1 Ответ

2 голосов
/ 15 марта 2019

Используя data.table, вы можете сначала расплавиться, прежде чем преобразовать его в желаемый широкий формат:

library(data.table)
setDT(dt)
cols <- names(dt[, -"id"])
dcast(
    melt(dt[, c(.(id=id), lapply(cols, function(x) paste0(x, get(x))))], id.vars="id"), 
    id ~ value,
    length)

Выход:

   id A1 B0 B1 B2 C5 C6 C7
1:  1  1  1  0  0  1  0  0
2:  2  1  0  1  0  0  1  0
3:  3  1  0  0  1  0  0  1

данные:

dt <- data.frame(A=c("1","1","1"),
    B=c("0","1","2"),
    C=c("5","6","7"),
    id=c(1,2,3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...