Переформатировать Dataframe имеют уникальные строки даты - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть датафрейм ниже:

dat

Day           Col1   Another    Value    High/Low
2018-01-01       A         B       20        High 
2018-01-01       B         G       30        High 
2018-01-02       C         D       40         Low
2018-01-02       C         M       70         Low
2018-01-02       C         G       50         Low

Как мне переформатировать это так, чтобы это выглядело так:

Я хочу упорядочить причины также в порядке убывания, если оно высокое ипо возрастанию, если низкий.Кроме того, у каждой даты никогда не будет нескольких максимумов / минимумов.

Day             Reason_1   Value_1    Reason_2    Value_2   Reason_3   Value_3  
2018-01-01           B-G        30         A-B         20         NA       NA
2018-01-02           C-D        40         C-G         50        C-M       70

Я пытался использовать функцию спреда, но значения Col1 и Другое делаются столбцами:

library(tidyr)
new_df<- spread(dat, Col1_Another_Combined, Value)

Не повезло сэто хотя

1 Ответ

0 голосов
/ 17 декабря 2018

Мы можем использовать различные глаголы из 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...