r - Tidyverse:group_by、排列和跨列滞后
问题描述
我正在研究一个体育投影模型,我需要了解某个团队最近的比赛:
- 他们的下一个对手是谁?(解决了)
- 他们的下一个对手上一次比赛是什么时候?
可以在下面使用的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))
如果我可以提供更多详细信息,请告诉我。
解决方案
我们可以使用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_)])
推荐阅读
- sql - 在 SQL Server Express 中创建了一个新表,运行 Windows 8.1,然后尝试插入一条记录并出现错误
- ios - 带有 CAShapeLayer 和 CABasicAnimation 的圆形进度条
- javascript - Bootstrap 4 - 按钮上的下拉菜单和工具提示?
- python - Python csv_writer:更改 oracle 日期列的输出格式
- sql - SQL中按行和列的计数网格
- angular - 如何在 Openlayers 4 中的 ol.control 上添加点击事件监听器?
- javascript - 转换 div 的高度以适应其内容
- javascript - 数组离子列表内的LocalStorage设置对象
- sql-server - 从文件批量插入引发错误无法批量加载,因为无法打开文件
- javascript - 正则表达式只检查一位小数