Я занимаюсь управлением данными для проекта и сталкиваюсь с трудностями с тем, что, как я думал, было бы базовым c преобразованием из длинного формата в широкий.
Данные выглядят примерно так:
df <- structure(list(ID = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2),
Time = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 1, 1, 1, 1, 2, 2),
Type = c("A", "B", "C", "D", "A", "B","C", "D", "A", "A", "B", "C", "D", "A", "B"),
Value = c(100, NA, 40, 123, 95, NA, 45, 1234, 100, 70, NA, 50, 12345, 75, NA)),
row.names = c(NA, 15L), class = "data.frame")
Основываясь на предыдущих ответах Stackoverflow, я пытаюсь использовать сводную область, как это:
df.wide <- df %>%
group_by(ID, Type) %>%
mutate(row = row_number()) %>%
pivot_wider(names_from = Type, values_from = Value)
Однако это возвращает фрейм данных со значениями NA в max (Time) для каждого идентификатора, который выглядит как это:
# A tibble: 5 x 7
ID Time row A B C D
<dbl> <dbl> <int> <dbl> <dbl> <dbl> <dbl>
1 1 1 1 100 NA 40 123
2 1 2 2 95 NA 45 1234
3 1 3 3 100 NA NA NA
4 2 1 1 70 NA 50 12345
5 2 2 2 75 NA NA NA
Что я делаю не так? Мой гугл и Stackoverflow-fu не смогли мне помочь.