Суммирование в R с использованием dplyr: значения в 2 разных столбцах - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть следующий фрейм данных:

 points_team1 points_team2               team1                team2
------------------------------------------------------------------------
1           42           32       Doppler/Horst        Doherty/Allen
2           40           46   Abbiati/Andreatta          Mesa/Garcia
3           50           49      Bergmann/Harms        Basta/Kolaric
4           46           48     Mol H./Berntsen          Regza/Smits
5           29           42       Doppler/Horst        Hyden/Brunner
6           31           42       Hyden/Brunner   Liamin/Krasilnikov

Теперь я хотел бы собрать сумму очков, которые каждая команда набрала и потеряла.Обратите внимание, что команда может быть командой 1 ИЛИ командой 2 (например, Хайден / Бруннер по одному на каждой стороне).

Я пытался использовать gather, но потом застрял, как использовать что-то вроде SUMIF.

k <- structure(list(points_team1 = c(42, 40, 50, 46, 29, 31), points_team2 = c(32, 
46, 49, 48, 42, 42), team1 = c("Doppler/Horst", "Abbiati/Andreatta", 
"Bergmann/Harms", "Mol H. / Berntsen", "Doppler/Horst", "Hyden/Brunner"
), team2 = c("Doherty/Allen", "Mesa/Garcia", "Basta/Kolaric", 
"Regza/Smits", "Hyden/Brunner", "Liamin/Krasilnikov")), row.names = c(NA, 
-6L), class = "data.frame")

v <- k %>% tidyr::gather('team1','team2', key="team_id", value="teamname") %>% 
                  dplyr::group_by(teamname) %>% 
                  dplyr::summarize(matches_played=n(), points_won=sum(points_team1[team_id == "team1"]))

Ожидаемый результат для данного набора данных будет следующим:

teamname                points_won     points_lost
-----------------------------------------------------
1 Doppler/Horst         71             74
2 Abbiati/Andreatta     40             46
3 Mesa/Garcia           46             40
4 Hyden/Brunner         73             71
...

Результаты, полученные при исследовании google и stackoverflow, дали только ответы на сумму всех строк, содержащих определенный элемент (например, здесь: Суммируйте с условиями в dplyr ), но в моем вопросе столбец для суммирования может зависеть от 2 разных столбцов, и я не могу понять, как это сделать.

Пожалуйста, помогите!

1 Ответ

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

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

team1 <- k %>% select(points_won = points_team1,
                      points_lost = points_team2,
                      team = team1)

team2 <- k %>% select(points_won = points_team2,
                      points_lost = points_team1,
                      team = team2)

bind_rows(team1, team2) %>%
    group_by(team) %>%
    summarise_all(sum)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...