基于另一个列值的有条件 Rollmean
Conditionally Rollmean based on another column value
我正在尝试根据球员在过去 3 场比赛中对阵同一个手投手的表现,计算他们的幻想得分的移动平均值。
FP <- data.frame(player = c(rep("A",10), rep("B",10), rep("C",10)),
pitcher_hand = rep(c("R","L"),15),
fantasy_points = runif(30, min = 0, max = 25))
我知道我可以使用 (zoo) 中的 rollapplyr 来获取移动平均线,但在这里我需要基于另一列的条件移动平均线。例如,第 7 行的新列移动平均值将是第 5、3 和 1 行的平均幻想点数,因为它针对的是同一个投手。我试过:
FP <- FP %>%
group_by(player) %>%
mutate(FP_L3 = rollapplyr(.,list(-(3:1)),function(x) mean(x[x[['pitcher_hand']]==pitcher_hand]),fill=NA))
如何做到这一点?我可以在一个大循环中执行此操作,遍历我的数据框中的每一行并搜索正确的匹配项,但是我想避免这种情况,因为我的数据框非常大。
在group_by
-
中包含pitcher_hand
library(dplyr)
FP %>%
group_by(player, pitcher_hand) %>%
mutate(FP_L3 = lag(rollmeanr(fantasy_points, 3, fill = NA))) %>%
ungroup
# player pitcher_hand fantasy_points FP_L3
# <chr> <chr> <dbl> <dbl>
# 1 A R 12.7 NA
# 2 A L 6.48 NA
# 3 A R 10.7 NA
# 4 A L 18.1 NA
# 5 A R 16.3 NA
# 6 A L 7.92 NA
# 7 A R 5.62 13.2
# 8 A L 22.5 10.8
# 9 A R 14.8 10.9
#10 A L 5.32 16.2
# … with 20 more rows
我正在尝试根据球员在过去 3 场比赛中对阵同一个手投手的表现,计算他们的幻想得分的移动平均值。
FP <- data.frame(player = c(rep("A",10), rep("B",10), rep("C",10)),
pitcher_hand = rep(c("R","L"),15),
fantasy_points = runif(30, min = 0, max = 25))
我知道我可以使用 (zoo) 中的 rollapplyr 来获取移动平均线,但在这里我需要基于另一列的条件移动平均线。例如,第 7 行的新列移动平均值将是第 5、3 和 1 行的平均幻想点数,因为它针对的是同一个投手。我试过:
FP <- FP %>%
group_by(player) %>%
mutate(FP_L3 = rollapplyr(.,list(-(3:1)),function(x) mean(x[x[['pitcher_hand']]==pitcher_hand]),fill=NA))
如何做到这一点?我可以在一个大循环中执行此操作,遍历我的数据框中的每一行并搜索正确的匹配项,但是我想避免这种情况,因为我的数据框非常大。
在group_by
-
pitcher_hand
library(dplyr)
FP %>%
group_by(player, pitcher_hand) %>%
mutate(FP_L3 = lag(rollmeanr(fantasy_points, 3, fill = NA))) %>%
ungroup
# player pitcher_hand fantasy_points FP_L3
# <chr> <chr> <dbl> <dbl>
# 1 A R 12.7 NA
# 2 A L 6.48 NA
# 3 A R 10.7 NA
# 4 A L 18.1 NA
# 5 A R 16.3 NA
# 6 A L 7.92 NA
# 7 A R 5.62 13.2
# 8 A L 22.5 10.8
# 9 A R 14.8 10.9
#10 A L 5.32 16.2
# … with 20 more rows