Ежемесячные фиктивные переменные в наборе данных - PullRequest
0 голосов
/ 23 октября 2018

У меня есть набор данных с 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 Ответ

0 голосов
/ 23 октября 2018

Один параметр - 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
...