首页 > 解决方案 > Tidyverse:group_by、排列和跨列滞后

问题描述

我正在研究一个体育投影模型,我需要了解某个团队最近的比赛:

  1. 他们的下一个对手是谁?(解决了)
  2. 他们的下一个对手上一次比赛是什么时候?

可以在下面使用的reprex。以第 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))

如果我可以提供更多详细信息,请告诉我。

标签: rtidyverse

解决方案


我们可以使用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_)])

推荐阅读