r - 如何使用 dplyr 中的 "between"函数向数据帧添加唯一标识符

标签 r dplyr

我正在 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/

相关文章:

R:选择 data.table 中的列范围

R SSH 隧道 MySQL

r - CMD 检查期间 Roxygen 示例中的 "Could not find function"

r - 创建一个包含可变数量列表的列表

r - 使用 dplyr 按多个行和列匹配对数据帧进行子集化

r - R中的多个条件过滤

r - 获取与 7 天前日期 'Around' 相关的分数

r - 从 R 中的列表中删除字符串向量

r - 如何将变异的列重新定位到原始列旁边?

r - 使用 dplyr 和 lazyeval 进行编程