Делить на ноль обходной путь - PullRequest
3 голосов
/ 04 августа 2020

Я подсчитываю передачи за бросок для ряда игр и суммирую по командам. Есть несколько игр, где не было сделано ни одного броска. Я считаю, что для этого анализа более важно заменить 0 на 1, чем исключать игру. Как бы я сделал это в R? Вот мой код.

match_df <- data.frame(TeamName = c("Team A", "Team A", "Team A", "Team B", "Team B", "Team B"), Passes = c(325,300,350,250,275,300), Shots = c(10,8,12,5,5,0))

overview <- match_df %>% 
  mutate(PassesPerShot = Passes / Shots) %>% 
  select(TeamName, PassesPerShot) %>% 
  group_by(TeamName) %>% 
  summarise(across(everything(), ~round(mean(.),digits = 1))) %>% 
  arrange(desc(PassesPerShot))

Ответы [ 2 ]

4 голосов
/ 04 августа 2020

Я не уверен, подходит ли обходной путь с pmax для вашего случая

within(match_df,PassesPerShot <- Passes/pmax(Shots,1))

, например,

> within(match_df,PassesPerShot <- Passes/pmax(Shots,1))
  TeamName Passes Shots PassesPerShot
1   Team A    325    10      32.50000
2   Team A    300     8      37.50000
3   Team A    350    12      29.16667
4   Team B    250     5      50.00000
5   Team B    275     5      55.00000
6   Team B    300     0     300.00000
4 голосов
/ 04 августа 2020

Мы могли бы replace на 1

library(dplyr)
match_df %>% 
     mutate(PassesPerShot = Passes / replace(Shots, Shots == 0, 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...