我有这样的数据帧

Game date Team Player
2020-09-12 Liverpool A
2020-09-12 Liverpool B
2020-09-12 Liverpool C
2020-09-12 Man Utd D
2020-09-12 Man Utd E
2020-09-12 Man Utd F
2020-09-12 Arsenal G
2020-09-12 Arsenal H
2020-09-12 Arsenal I
2020-09-15 Liverpool A
2020-09-15 Liverpool B
2020-09-15 Liverpool C
2020-09-15 Man Utd D
2020-09-15 Man Utd E
2020-09-15 Man Utd Q
2020-09-15 Arsenal G
2020-09-15 Arsenal O
2020-09-15 Arsenal I
2020-09-18 Liverpool A
2020-09-18 Liverpool B
2020-09-18 Liverpool C
2020-09-18 Man Utd M
2020-09-18 Man Utd H
2020-09-18 Man Utd Q
2020-09-18 Arsenal G
2020-09-18 Arsenal H
2020-09-18 Arsenal I

我想统计一下与前一场比赛(准确地说是上一场比赛)相比,球队中出现了多少独特的价值.如果球员出现在第一局,第二次失误,出现在第三局,他应该是唯一的价值在第三局).

期望输出

Game date Team Unique players
2020-09-15 Liverpool 0
2020-09-15 Man Utd 1
2020-09-15 Arsenal 1
2020-09-18 Liverpool 0
2020-09-18 Man Utd 2
2020-09-18 Arsenal 1

有什么高雅的方法可以做到这一点吗?

推荐答案

library(tidyr)
library(dplyr)
df |> 
  group_by(Game_date, Team) |>
  summarize(players = list(unique(Player))) |>
  group_by(Team) |>
  arrange(Game_date) |>
  mutate(
    prev = lag(players),
    unique_new_players = mapply(\(x, y) length(setdiff(x, y)), players, prev)
  ) |>
  slice(-1) |>
  ungroup() |>
  select(Game_date, Team, unique_new_players)
# # A tibble: 6 × 3
#   Game_date  Team      unique_new_players
#   <chr>      <chr>                  <int>
# 1 2020-09-15 Arsenal                    1
# 2 2020-09-18 Arsenal                    1
# 3 2020-09-15 Liverpool                  0
# 4 2020-09-18 Liverpool                  0
# 5 2020-09-15 Man_Utd                    1
# 6 2020-09-18 Man_Utd                    2

R相关问答推荐

将收件箱变量传递给ggplot 2函数

混淆矩阵,其中每列和等于1

如何根据条件计算时差(天)

使用tidy—select创建一个新的带有mutate的摘要变量

R根据条件进行累积更改

IMF IFS数据以R表示

多个过滤器内的一个盒子在仪表板Quarto

根据元素和前一个值之间的差值过滤矩阵的元素

条形图顶部与其错误条形图不对齐

将多个变量组合成宽格式

使用geom_iles在一个切片中包含多个值

有没有办法定制Plot(allEffects())面板标题?

层次树图的数据树

以任意顺序提取具有多个可能匹配项的组匹配项

在r中整理图例和堆叠图的问题

如何将宽格式的患者信息数据高效地转换为患者计数的时间序列?

以R表示的NaN值的IS.NA状态

按两个条件自动过滤数据

将每晚的平均值与每晚的值进行比较,统计是否有效?

如何计算多个变量的百分比与总和的百分比?