如何计算r中两类因子变量的运行计数?
我正在处理体育数据,我想在一个投篮数据框中计算出每支球队的总进球数,然后减去投篮时的进球数差。例如,假设我的数据如下所示:如何计算r中两类因子变量的运行计数?,r,R,我正在处理体育数据,我想在一个投篮数据框中计算出每支球队的总进球数,然后减去投篮时的进球数差。例如,假设我的数据如下所示: (shots <- structure(list(Team = c("One", "Two", "One", "One", "Two", "One", "Two"), Goal = c("N", "N", "N", "Y", "Y", "N", "Y")), class = "data.frame", .Names = c("Te
(shots <- structure(list(Team = c("One", "Two", "One", "One", "Two", "One", "Two"),
Goal = c("N", "N", "N", "Y", "Y", "N", "Y")), class = "data.frame",
.Names = c("Team", "Goal"), row.names = c(NA, -7L)))
Team Goal
One N
Two N
One N
One Y
Two Y
One N
Two Y
以下是实现这一目标的简单方法:
shots$Team_1_diff <- with(shots,cumsum((Team=="One"&Goal=="Y")-(Team=="Two"&Goal=="Y")))
data
# Team Goal Team_1_diff
# 1 One N 0
# 2 Two N 0
# 3 One N 0
# 4 One Y 1
# 5 Two Y 0
# 6 One N 0
# 7 Two Y -1
shots$Team_1_diff这里是一个dplyr
答案
library(dplyr)
shots %>%
mutate(Team_1_Goals = cumsum(Team=="One" & Goal=="Y"),
Team_2_Goals = cumsum(Team=="Two" & Goal=="Y"),
Team_1_diff = Team_1_Goals - Team_2_Goals)
#> # A tibble: 7 x 5
#> Team Goal Team_1_Goals Team_2_Goals Team_1_diff
#> <chr> <chr> <int> <int> <int>
#> 1 One N 0 0 0
#> 2 Two N 0 0 0
#> 3 One N 0 0 0
#> 4 One Y 1 0 1
#> 5 Two Y 1 1 0
#> 6 One N 1 1 0
#> 7 Two Y 1 2 -1
库(dplyr)
快照%>%
变异(团队目标=cumsum(团队=“一”和目标=“Y”),
团队2目标=cumsum(团队=“两个”&目标=“Y”),
团队1\u差异=团队1\u目标-团队2\u目标)
#>#tibble:7 x 5
#>团队目标团队1目标团队2目标团队1差异
#>
#>1 1 N 0 0 0 0
#>2两个N 0 0 0 0
#>3 1 N 0 0 0 0
#>4一Y 10 1
#>5 2 Y 11 0
#>6一N 11 0
#>7两个Y 1 2-1
你的题目提到了“因子变量”。如果使用data.frame
或read.csv
(或类似内容)加载数据,则会将这两个变量转换为因子,因为这是默认值,但通常不是您真正想要的。即使变量存储为因子,此代码仍将工作。您可能需要考虑使用<代码> StrassAsFase= false < /Cord>选项,但是您正在获取数据。或者在许多其他选项中使用dplyr
版本,如read\u csv
。是否只有两个团队?是否只需要最后一列?还是另外两个?
library(dplyr)
shots %>%
mutate(Team_1_Goals = cumsum(Team=="One" & Goal=="Y"),
Team_2_Goals = cumsum(Team=="Two" & Goal=="Y"),
Team_1_diff = Team_1_Goals - Team_2_Goals)
#> # A tibble: 7 x 5
#> Team Goal Team_1_Goals Team_2_Goals Team_1_diff
#> <chr> <chr> <int> <int> <int>
#> 1 One N 0 0 0
#> 2 Two N 0 0 0
#> 3 One N 0 0 0
#> 4 One Y 1 0 1
#> 5 Two Y 1 1 0
#> 6 One N 1 1 0
#> 7 Two Y 1 2 -1