Выполнение расчетов между рядами в R - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь выяснить, как сделать расчет между (или между?) Строками.Я пытался найти это, но, очевидно, мой Google-Fu сегодня не силен, потому что я просто не могу найти правильные условия поиска.

Вот супер упрощенный пример типа данных, которые япытаясь разобраться с:

mydf <- data.frame(pair = rep(1,2), 
                   participant = c("PartX", "PartY"), 
                   goalsAtt = c(6, 3), 
                   goalsScr = c(2, 3))

У нас есть данные о том, сколько "голов" участник пробовал и сколько на самом деле они забили, и позвольте мне сказать, что я хочу знать об их "защитной" способности.Теперь по сути то, что я хочу сделать, это mutate() два новых столбца, называемых… скажем, saved и missed, где saved будет целями, предпринятыми противоположным участником, за вычетом забитых ими голов, и missedбудет просто цели, забитые противоположным участником.Таким образом, очевидно, что участник X сохранил бы 0 и пропустил 3, а участник Y сохранил бы 4 и пропустил 2.

Теперь, очевидно, это глупый простой пример, и у меня будет 6 разных типов «цели»иметь дело с парой 2,5к, чтобы пройти, но у меня просто ментальный блок о том, с чего начать.

Любитель кодер здесь, и решения в стиле Tidyverse приветствуются.

1 Ответ

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

ОК, поэтому давайте предположим, что pair может быть только для 2 команд.Вот решение tidyverse, где мы сначала устанавливаем порядковый номер для позиции в группе, а затем вычитаем для сохраненных целей.Нечто похожее по пропущенным целям.

library(tidyverse)
mydf %>% 
  group_by(pair) %>% 
  mutate(id = row_number()) %>% 
  mutate(goalsSaved = if_else(id == 1,
                              lead(goalsAtt) - lead(goalsScr),
                              lag(goalsAtt) - lag(goalsScr))) %>% 
  mutate(goalsMissed = if_else(id == 1,
                               lead(goalsScr),
                               lag(goalsScr)))

# A tibble: 2 x 7
# Groups:   pair [1]
   pair participant goalsAtt goalsScr    id goalsSaved goalsMissed
   <dbl> <fct>          <dbl>    <dbl> <int>      <dbl>       <dbl>
 1     1 PartX              6        2     1          0           3
 2     1 PartY              3        3     2          4           2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...