Это должно быть просто
library(tidyverse)
df <- tribble(~ID, ~Code,
1, "A",
1, "A12",
2, "M",
3, "A",
2, "M12",
4, "A12",
5, "M12",
6, "M",
7, "A",
6, "M12")
df %>%
spread(key = Code, value = Code)
Результат
# A tibble: 7 x 5
ID A A12 M M12
<dbl> <chr> <chr> <chr> <chr>
1 1 A A12 NA NA
2 2 NA NA M M12
3 3 A NA NA NA
4 4 NA A12 NA NA
5 5 NA NA NA M12
6 6 NA NA M M12
7 7 A NA NA NA
Многие предпочли бы кодирование столбцов 1/0, тогда решение будет
df %>%
mutate(bin = 1) %>%
spread(key = Code, value = bin, fill = 0)
# A tibble: 7 x 5
ID A A12 M M12
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 1 0 0
2 2 0 0 1 1
3 3 1 0 0 0
4 4 0 1 0 0
5 5 0 0 0 1
6 6 0 0 1 1
7 7 1 0 0 0