Ежемесячные фиктивные переменные в наборе данных
У меня есть набор данных с 10 столбцами. Одним из таких столбцов является дата. Я хочу создать фиктивные переменные для каждого месяца. Как мне это сделать?
Date Col1 Col2
2017-01-09 v 2
2017-05-01 s 7
2018-03-02 k 9
Я могу извлечь месяц, используя lubridate:
df$MONTH<-month(df$Date)
Date Col1 Col2 MONTH
2017-01-09 v 2 1
2017-05-01 s 7 5
2018-03-02 k 9 3
Как мне преобразовать это, чтобы фиктивные переменные для каждого месяца были привязаны к оригиналу?
Date Col1 Col2 M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 M12
2017-01-09 v 2 1 0 0 0 0 0 0 0 0 0 0 0
2017-05-01 s 7 0 0 0 0 1 0 0 0 0 0 0 0
2018-03-02 k 9 0 0 1 0 0 0 0 0 0 0 0 0
1 ответ
Решение
Один вариант tabulate
на 'МЕСЯЦ' и создайте колонны
df[paste0("M", 1:12)] <- as.data.frame(t(sapply(df$MONTH, tabulate, 12)))
Или использовать row/column
индексировать, где индекс столбца взят из "МЕСЯЦА" и назначить эти значения из matrix
от 0 до 1
m1 <- matrix(0, nrow(df), 12)
m1[cbind(seq_len(nrow(df)), df$MONTH)] <- 1
df[paste0("M", 1:12)] <- m1
df
# Date Col1 Col2 MONTH M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 M12
#1 2017-01-09 v 2 1 1 0 0 0 0 0 0 0 0 0 0 0
#2 2017-05-01 s 7 5 0 0 0 0 1 0 0 0 0 0 0 0
#3 2018-03-02 k 9 3 0 0 1 0 0 0 0 0 0 0 0 0