需要使用 R 找出哪些球员在哪一年踢球

Need to find which players played in which year(s) using R

我有棒球数据,需要找到哪些球员 --

  1. 1945 年演奏但 1946 年未演奏。
  2. 这两年都没有参加比赛。
  3. 1945 年和 1946 年都演奏过。

对于 #1,所需的输出将是 --

player  
Albert
Barnes

对于 #2,所需的输出将是 --

player
Andrews
David

对于 #3,所需的输出将是 --

player
Baker
Frank

我更喜欢 dplyr 解决方案,但对其他人开放。我在 Whosebug 中找不到符合我情况的解决方案。如果有的话,如果你能分享它我将不胜感激 link.

输入样本

Dput数据样本

structure(list(player = c("Albert", "Andrews", "Baker", "Charles", 
"Baker", "David", "Frank", "Barnes", "Ross", "Frank", "Frank"
), year = c(1945, 1944, 1946, 1946, 1945, 1947, 1945, 1945, 1946, 
1946, 1947)), class = "data.frame", row.names = c(NA, -11L))

应该这样做:

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
dat <- structure(list(player = c("Albert", "Andrews", "Baker", "Charles", 
                                 "Baker", "David", "Frank", "Barnes", "Ross", "Frank", "Frank"
), year = c(1945, 1944, 1946, 1946, 1945, 1947, 1945, 1945, 1946, 
            1946, 1947)), class = "data.frame", row.names = c(NA, -11L))


dat %>% 
  group_by(player) %>% 
  filter(1945 %in% year  & ! 1946 %in% year) %>% 
  select(player) 
#> # A tibble: 2 × 1
#> # Groups:   player [2]
#>   player
#>   <chr> 
#> 1 Albert
#> 2 Barnes

  
dat %>% 
  group_by(player) %>% 
  filter(! 1945 %in% year  & ! 1946 %in% year) %>% 
  select(player) 
#> # A tibble: 2 × 1
#> # Groups:   player [2]
#>   player 
#>   <chr>  
#> 1 Andrews
#> 2 David


dat %>% 
  group_by(player) %>% 
  filter(all(c(1945, 1946) %in% year)) %>% 
  select(player) %>% 
  distinct()
#> # A tibble: 2 × 1
#> # Groups:   player [2]
#>   player
#>   <chr> 
#> 1 Baker 
#> 2 Frank

reprex package (v2.0.1)

于 2022-05-03 创建