我正在 RStudio 中处理MLB Statcast 数据,并试图确定哪些投手最能利用好球区的每个部分。
Statcast 给出了球穿过球板位置的坐标 plate_x
(球场距球板中间的左/右距离,以英尺为单位,如下所示)它穿过本垒板)和 plate_z
(穿过本垒板正面时的球场高度,以英尺为单位)。
示例数据帧
:
pitcher_name <- c('AJ Griffin','AJ Griffin','AJ Griffin','AJ Griffin','AJ
Griffin','AJ Griffin','Adam Conley','Adam Conley','Adam Conley','Adam Conley')
plate_x <- c(0.88, -0.74, 0.54, 0.51, 0.54, 0.49, -0.70, -0.67, 0.78, 0.58)
plate_z <- c(1.63, 1.81, 2.03, 2.60, 1.83, 1.58, 2.82, 2.13, 1.10, 1.72)
strike_zone_analysis <- data.frame(pitcher_name, plate_x, plate_z)
我正在寻找隔离较低的攻击,我可以使用 dplyr
中内置的 Between 函数来实现:
low_zone <- strike_zone_analysis %>% filter(between(plate_x, -1.01, 1.01),
between(plate_z, 1.49, 2.17))
接下来我想做的是使用 dplyr 中的 mutate 分配一个唯一标识符(表示低罢工与非低罢工的新列),该标识符适合特定于上面的 Between 函数的数据点。我的最终目标是使用类似于以下的代码来计算每个投手总体投出的低击球部分:
P <- pitch_analysis.data %>%
group_by(pitcher_name) %>%
summarise(r=sum(str_detect(description,"swinging"))/n())
不确定如何组合 dplyr
的 mutate 和 Between 函数。
最佳答案
strike_zone_analysis %>%
mutate(low_zone = between(plate_x, -1.01, 1.01) & between(plate_z, 1.49, 2.17)) %>%
group_by(pitcher_name) %>%
summarize(low_percent = sum(low_zone)/n())
您可以在 mutate 中组合两个条件,然后对转换为二进制的逻辑进行分组和求和。
关于r - 如何使用 dplyr 中的 "between"函数向数据帧添加唯一标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44686222/