Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算r中两类因子变量的运行计数?_R - Fatal编程技术网

如何计算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