Кумулятивная сумма очков за победу проигранных команд? - PullRequest
0 голосов
/ 24 апреля 2020

Итак, у меня есть несколько спортивных баз данных, и я хотел бы накапливать сумму целей в двух столбцах для одного и того же текста, а не для одного. В частности:

Year    team.Win    points.Win  team.Lose   points.Lose
1982    SUNY Cortland   2   Boston College  0
1982    Massachusetts   3   Rochester (NY)  1
1982    Princeton       1   George Mason    0
1982    Harvard         3   Brown           1
1982    Connecticut     2   SUNY Cortland   0
1982    UCF             2   Massachusetts   1
1982    North Carolina  4   Princeton       0
1982    Mo.-St. Louis   2   Harvard         1
1982    UCF             3   Connecticut     1
1982    North Carolina  2   Mo.-St. Louis   1
1982    Connecticut     2   Mo.-St. Louis   1
1982    North Carolina  2   UCF             0 

должно быть

Year    team.Win    points.Win  team.Lose   points.Lose
1982    SUNY Cortland   2   Boston College          0
1982    Massachusetts   3   Rochester (NY)          1
1982    Princeton       1   George Mason            0
1982    Harvard         3   Brown                   1
1982    Connecticut     2   SUNY Cortland           2
1982    UCF             2   Massachusetts           4
1982    North Carolina  4   Princeton               1
1982    Mo.-St. Louis   2   Harvard                 4
1982    UCF             5   Connecticut             3
1982    North Carolina  6   Mo.-St. Louis           3
1982    Connecticut     5   Mo.-St. Louis           4
1982    North Carolina  8   UCF                     5

Это мой первый раз в стеке, как пользователь! Извините, если форматирование не соответствует чашке чая на сайте. Я задал этот вопрос, потому что не хочу запускать код, который помещает все числа в следующий столбец и суммарную сумму оттуда. Я просто хочу сделать это как есть.

У меня есть опыт работы в R, но я развил свои навыки в Python. Я предпочитаю первое. Я немного знаком с dplyr.

РЕДАКТИРОВАТЬ: Я не хочу, чтобы это было к году! Просто пропустите все строки и проведите накопительную сумму (в целях) на основе текстовых значений (команд).

1 Ответ

0 голосов
/ 24 апреля 2020

Вот один подход с tidyverse в R.

Этот подход включает в себя перевод данных в длинную форму, так что кумулятивные баллы рассчитываются командой (включая баллы как из выигрышей, так и из проигрышей).

После этого вернитесь в широкую форму. Я надеюсь, что это полезно.

library(tidyverse)

df %>%
  mutate(rn = row_number()) %>%
  pivot_longer(cols = c(-Year, -rn), names_to = c(".value", "outcome"), names_pattern = "(\\w+).(\\w+)") %>%
  group_by(team) %>%
  mutate(cum_points = cumsum(points)) %>%
  pivot_wider(id_cols = c(Year, rn), names_from = c(outcome, outcome), values_from = c(team, cum_points), names_sep = ".") %>%
  select(Year, ends_with("Win"), ends_with("Lose"))

Вывод

# A tibble: 12 x 5
    Year team.Win       cum_points.Win team.Lose      cum_points.Lose
   <int> <chr>                   <int> <chr>                    <int>
 1  1982 SUNY_Cortland               2 Boston_College               0
 2  1982 Massachusetts               3 Rochester_(NY)               1
 3  1982 Princeton                   1 George_Mason                 0
 4  1982 Harvard                     3 Brown                        1
 5  1982 Connecticut                 2 SUNY_Cortland                2
 6  1982 UCF                         2 Massachusetts                4
 7  1982 North_Carolina              4 Princeton                    1
 8  1982 Mo.-St._Louis               2 Harvard                      4
 9  1982 UCF                         5 Connecticut                  3
10  1982 North_Carolina              6 Mo.-St._Louis                3
11  1982 Connecticut                 5 Mo.-St._Louis                4
12  1982 North_Carolina              8 UCF                          5
...