【发布时间】:2021-03-27 19:45:44
【问题描述】:
我正在尝试编写一个函数来计算棒球运动员的得分。我已经创建了拆分 Tibble、一个工作 Tibble 以及一个与 mutate 函数一起使用的函数,以将一个分数列添加到工作 Tibble,df。
该函数应该从工作的 Tibble 中获取输入,并根据相关的拆分计算分数(平均值之和)。我提供了以下代表。当我尝试执行我的功能时,我的分数为零。预期得分值遵循代表。
谁能告诉我我做错了什么?
library(tidyverse)
split <- tibble(player=c("Soto","Soto","Judge","Judge","Soto","Soto","Judge","Judge"),
split=c("Grass","Turf","Grass","Turf","DAY","NIGHT", "DAY","NIGHT"),
AVG=c(200,225,250,275,300,325,350,375))
df <- tibble(date = c("2021-03-24", "2021-03-27", "2021-03-21", "2021-03-25"), player=c("Soto","Soto", "Judge", "Judge"), TOD=c("DAY","DAY","DAY","NIGHT"), surface=c("Grass","Turf","Turf","Grass"))
split
#> # A tibble: 8 x 3
#> player split AVG
#> <chr> <chr> <dbl>
#> 1 Soto Grass 200
#> 2 Soto Turf 225
#> 3 Judge Grass 250
#> 4 Judge Turf 275
#> 5 Soto DAY 300
#> 6 Soto NIGHT 325
#> 7 Judge DAY 350
#> 8 Judge NIGHT 375
df
#> # A tibble: 4 x 4
#> date player TOD surface
#> <chr> <chr> <chr> <chr>
#> 1 2021-03-24 Soto DAY Grass
#> 2 2021-03-27 Soto DAY Turf
#> 3 2021-03-21 Judge DAY Turf
#> 4 2021-03-25 Judge NIGHT Grass
getSplitScore <- function(df,player,surface, timeofDay){
z <- sum(df[df$player==player & df$split==timeofDay,]$AVG)
y <- sum(df[df$player==player & df$split==surface,]$AVG)
return(z + y)
}
df <- df %>%
mutate(score=getSplitScore(split, player, surface, TOD))
df
#> # A tibble: 4 x 5
#> date player TOD surface score
#> <chr> <chr> <chr> <chr> <int>
#> 1 2021-03-24 Soto DAY Grass 0
#> 2 2021-03-27 Soto DAY Turf 0
#> 3 2021-03-21 Judge DAY Turf 0
#> 4 2021-03-25 Judge NIGHT Grass 0
由reprex package (v0.3.0) 于 2021 年 3 月 27 日创建
我期待的是这样的:
#> # A tibble: 4 x 5
#> date player TOD surface score
#> <chr> <chr> <chr> <chr> <int>
#> 1 2021-03-24 Soto DAY Grass 500
#> 2 2021-03-27 Soto DAY Turf 525
#> 3 2021-03-21 Judge DAY Turf 625
#> 4 2021-03-25 Judge NIGHT Grass 625
【问题讨论】:
-
split标题中没有BaVG列。我也不确定您是如何得出分值的。 -
在您想要的输出中,200 分是 Soto Day 和 Soto TOD 的总和?我只需要一个关于如何计算分数的示例。
-
分数只是分割BaVG/的总和
-
@WilliamGram 不错。有时你可能离事物太近了。谢谢!