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