【问题标题】:Multiple Conditions for dplyr Filter Functionsdplyr 过滤函数的多个条件
【发布时间】:2017-06-23 22:03:51
【问题描述】:

希望确定哪些投手的投球位置逐年变化最大。我在下面包含了到目前为止我使用的代码。

strike_zone_analysis <- final_2016 %>% mutate(low_zone = 
ifelse(between(plate_x, -1.10, 1.10) & 
                         between(plate_z, 1.49, 2.17), 1, 0)) %>%
group_by(pitcher_name, game_year) %>%
summarise(n_of_pitches = n(),
prop_low_zone = sum(low_zone)/n_of_pitches)

growth <- function(x)x/lag(x)-1
YOY <- strike_zone_analysis_15_16 %>% 
group_by(pitcher_name) %>% 
mutate_each(funs(growth), prop_low_zone)

YOY <- mutate(YOY, prop_low_zone = prop_low_zone*100)
YOY$prop_low_zone <-round(YOY$prop_low_zone, 1)

出于本示例的目的,我在下面创建了以下数据框,该数据框与上述代码中的 YOY 数据框大部分匹配。

pitcher_name <- c('AJ Griffin','AJ Griffin','AJ Burnett','AJ 
Burnett','Zach Godley','Zach Godley')
game_year <- c(2016, 2017, 2016, 2017, 2016, 2017)
#_of_pitches <- c(456, 550, 1001, 1760, 1500, 1800)
pitching <- data.frame(pitcher_name, game_year, #_of_pitches)

我希望在数据框中分离出在 2016 年和 2017 年至少投出 500 次投球的投手。 如果我使用 filter(pitching, #_of_pitches &gt;=500),当我只想要两个赛季都投出至少 500 次投球的投手(在本例中为 AJ Burnett 和 Zach Godley)时,我只需要所有三个投手。我猜有一种方法可以使用内置的 dplyr 过滤器功能来做到这一点,但我一直在旋转我的轮子试图弄清楚它。任何输入将不胜感激。谢谢!

【问题讨论】:

  • 尝试 '&' 在 'filter' 中合并大小写
  • # 删除其余行。

标签: r dplyr filtering


【解决方案1】:
library(tidyverse)

# create data set
pitcher_name <- c('AJ Griffin','AJ Griffin','AJ Burnett','AJ Burnett','Zach Godley','Zach Godley')
game_year    <- c(2016, 2017, 2016, 2017, 2016, 2017)
n_of_pitches <- c(456, 550, 1001, 1760, 1500, 1800)

pitching <- data.frame(pitcher_name, game_year, n_of_pitches)

# filter for pitchers who made >= 500 pitches in both 2016 and 2017
pitching %>% 
  group_by(pitcher_name) %>%
  filter(all(n_of_pitches >= 500))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-18
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2020-04-17
    • 1970-01-01
    • 2019-10-20
    相关资源
    最近更新 更多