R: Расширение R-фактора в фиктивные столбцы для каждого уровня фактора
У меня довольно большой фрейм данных в R с двумя столбцами. Я пытаюсь сделать из Code
столбец (factor
наберите с 858 уровнями) фиктивные переменные. Проблема в том, что R Studio всегда зависал, когда я пытался это сделать.
> str(d)
'data.frame': 649226 obs. of 2 variables:
$ User: int 210 210 210 210 269 317 317 317 317 326 ...
$ Code : Factor w/ 858 levels "AA02","AA03",..: 164 494 538 626 464 496 435 464 475 163 ...
User
столбец не уникален, это означает, что может быть несколько строк с одинаковыми User
, Не имеет значения, если в итоге количество строк остается одинаковым или строки с одинаковыми User
объединены в одну строку с несколькими непустыми столбцами с количеством Code
s.
Я нашел пару решений, которые работают для меньшего набора данных, но не для моего.
Пробовал с помощью
model.matrix
, но R Studio просто вылетаетm <- model.matrix( ~ Code, data = d)
Найдено здесь Автоматическое расширение R-фактора в набор 1/0 переменных индикатора для каждого уровня фактора
Пытался
for
цикл сifelse
, но код работает в течение 4 часов, а затем я заметил, что R Studio рухнул.for (t in unique(d$Code)) { d[paste("Code", t, sep = "")] <- ifelse(d$Code == t, 1, 0) }
Найдено здесь Создание новых столбцов фиктивной переменной из категориальной переменной
Было бы здорово, если бы вы могли порекомендовать мне какой-то метод, который быстра и работает для данных такого типа.
Спасибо!
1 ответ
Это сработало для меня отлично:
library(reshape2)
m <- acast(data = d, User ~ Code)
Единственное, что было произведено NA
с, а не 0
с, но это можно легко изменить с помощью этого:
m[is.na(m)] <- 0