Использование функции dcast () после dplyr Summaze () - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть набор данных из примерно 4000 баллов по четырем различным событиям стрельбы из лука.В наборе данных есть два разных класса оборудования: составное и рекурсивное.Мне нужно показать некоторую сводную статистику, сгруппированную по «Событию», но распределенную в таблице по «Классу».

Вот несколько примеров данных:

> results
# A tibble: 4,478 x 8
    Year Event                 Class    Division Gender Organization Setting Score
   <dbl> <chr>                 <chr>    <chr>    <chr>  <chr>        <chr>   <dbl>
 1  2016 NFAA Indoor Nationals Compound Amateur  F      NFAA         Indoor    711
 2  2016 NFAA Indoor Nationals Compound Amateur  F      NFAA         Indoor    708
 3  2016 NFAA Indoor Nationals Compound Amateur  F      NFAA         Indoor    708
 4  2016 NFAA Indoor Nationals Compound Amateur  F      NFAA         Indoor    702
 5  2016 NFAA Indoor Nationals Compound Amateur  F      NFAA         Indoor    700
 6  2016 NFAA Indoor Nationals Compound Amateur  F      NFAA         Indoor    700
 7  2016 NFAA Indoor Nationals Compound Amateur  F      NFAA         Indoor    699
 8  2016 NFAA Indoor Nationals Compound Amateur  F      NFAA         Indoor    696
 9  2016 NFAA Indoor Nationals Compound Amateur  F      NFAA         Indoor    694
10  2016 NFAA Indoor Nationals Compound Amateur  F      NFAA         Indoor    690
# … with 4,468 more rows

Яиспользуя следующий код, чтобы сгенерировать 10-й, 50-й и 90-й процентили для каждого класса оборудования в четырех событиях.

percentile_summaries <- results %>%
  select(Event, Class, Score) %>%
  group_by(Event, Class) %>%
  summarize(p10=quantile(Score, c(.10)),
            p50=median(Score),
            p90=quantile(Score, c(.90))
            )

Этот код производит следующий вывод:

> percentile_summaries
# A tibble: 8 x 5
# Groups:   Event [?]
  Event                         Class      p10   p50   p90
  <chr>                         <chr>    <dbl> <dbl> <dbl>
1 NFAA Field Nationals          Compound  504.  538   555 
2 NFAA Field Nationals          Recurve   398.  463   496.
3 NFAA Indoor Nationals         Compound  656   704   718 
4 NFAA Indoor Nationals         Recurve   464.  554.  626 
5 USA Archery Indoor Nationals  Compound 1026. 1116  1166 
6 USA Archery Indoor Nationals  Recurve   706   959  1105 
7 USA Archery Outdoor Nationals Compound 1148. 1328. 1398 
8 USA Archery Outdoor Nationals Recurve   860. 1096  1252.

Теперь яЯ хотел бы распределить эти процентили, чтобы у меня было три процентиля для соединения и три процентиля для рекурсии подряд с названием события.В конце концов, я сгенерирую таблицу HTML, которая выглядит (примерно) так:

                              Compound                 Recurve
                         p10     p50     p90     p10     p50     p90
NFAA Field Nationals     504     538     555     398     463     496
NFAA Indoor Nationals    656     704     718     464     554     626
etc.

Пока что последний шаг распространения этих данных ускользает от меня.Какие-либо предложения?Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2019

Одним из возможных решений является следующее.Начиная с вашего percentile_summaries тибля, вы можете использовать пакет data.table, чтобы использовать функцию dcast с несколькими столбцами в аргументе value.var, т.е.

library(data.table)
df <- dcast(setDT(percentile_summaries), Event ~ Class, value.var = c("p10", "p50", "p90"))

Вывод:

                        Event p10_Compound p10_Recurve p50_Compound p50_Recurve p90_Compound p90_Recurve
         NFAA_Field_Nationals          504         398          538         463          555         496
        NFAA_Indoor_Nationals          656         464          704         554          718         626
 USA_Archery_Indoor_Nationals         1026         706         1116         959         1166        1105
USA_Archery_Outdoor_Nationals         1148         860         1328        1096         1398        1252

Здесь порядок столбцов не является желаемым, так как «Составные» и «Изогнутые» чередуются.Чтобы упорядочить их, используйте просто

df[,c(1,2,4,6,3,5,7)]

Вывод:

                        Event p10_Compound p50_Compound p90_Compound p10_Recurve p50_Recurve p90_Recurve
         NFAA_Field_Nationals          504          538          555         398         463         496
        NFAA_Indoor_Nationals          656          704          718         464         554         626
 USA_Archery_Indoor_Nationals         1026         1116         1166         706         959        1105
USA_Archery_Outdoor_Nationals         1148         1328         1398         860        1096        1252

Затем вы можете перейти к нужной таблице HTML.

...