Мы можем использовать различные глаголы из tidyverse
:
Сначала мы группируем по дням, а затем вычисляем ранжирование Value
.Мы используем row_number
, потому что это приведет к уникальному ранжированию по строкам.Мы используем unite
для создания столбца reason
, а затем используем gather
, unite
и spread
, чтобы выполнить окончательное преобразование ширины в длину в ширину.Следует отметить, что столбцы value_*
по-прежнему кодируются как символьные значения, которые можно легко изменить.
dat %>%
group_by(Day) %>%
mutate(row_num_value = row_number(Value)) %>% # ranking
unite(reason, Col1, Another, sep = " - ") %>% # reason column
gather(variable, value, reason, Value) %>% # convert to long
unite(variable2, variable, row_num_value, sep = '_') %>%
spread(variable2, value) # convert to wide
# A tibble: 2 x 8
# Groups: Day [2]
Day High.Low reason_1 reason_2 reason_3 Value_1 Value_2 Value_3
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 2018-01-01 High A - B B - G NA 20 30 NA
2 2018-01-02 Low C - D C - G C - M 40 50 70