Tidyverse: группировка, упорядочивание и отставание по столбцам

#r #tidyverse

#r #tidyverse

Вопрос:

Я работаю над проекционной моделью для видов спорта, где мне нужно понять последнюю игру определенной команды:

  1. Кто их следующий противник? (решаемая)
  2. Когда в последний раз играл их следующий противник?

повторите, который можно использовать ниже. Используя строку 1 в качестве примера, мне нужно было бы понять, что самой последней игрой следующего соперника «a» «e» был game_id_ 3.

 game_id_ <- c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6)

game_date_ <- c(rep("2021-01-29", 6), rep("2021-01-30", 6))

team_ <- c("a", "b", "c", "d", "e", "f", "b", "c", "d", "f", "e", "a")

opp_ <- c("b", "a", "d", "c", "f", "e", "c", "b", "f", "d", "a", "e")

df <- data.frame(game_id_, game_date_, team_, opp_)

#Next opponent
df <- df %>% 
  arrange(game_date_, game_id_, team_) %>% 
  group_by(team_) %>% 
  mutate(next_opp = lead(opp_, n = 1L))
 

Если я могу предоставить более подробную информацию, пожалуйста, дайте мне знать.

Ответ №1:

Мы можем использовать match для возврата соответствующего game_id_

 library(dplyr)
df %>%
   arrange(game_date_, game_id_, team_) %>%
   group_by(team_) %>%
   mutate(next_opp = lead(opp_, n = 1L)) %>%
   ungroup %>%
   mutate(last_time = game_id_[match(next_opp, opp_)])
 

Комментарии:

1. Ах, это очень близко и, вероятно, ошибка моего reprex. Как мы можем использовать match(), чтобы найти самые последние, а не первые?

2. @gav не могли бы вы обновить свой reprex. спасибо

3. @gav возможно ли, чтобы вы обновили ожидаемый результат, чтобы я мог перепроверить

4. @gav Вы уже сделали arrange это раньше, game_date_

5. Спасибо, акрун! Мне просто нужно было организовать по-другому после «следующего противника» и до «матча», вы были абсолютно правы. Я ценю вашу помощь сегодня. Хороших выходных!