#r #dataframe #dplyr #data.table #purrr
#r #фрейм данных #dplyr #данные.таблица #мурлыканье
Вопрос:
Я пытаюсь создать фрейм данных фиктивного кода со смешанными (числовыми множительными) переменными. Но 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.
mltools::one_hot
2. поддерживает ли он факторную переменную с менее чем 2 уровнями?
Ответ №1:
Используя 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))