【发布时间】:2015-07-21 10:45:17
【问题描述】:
我有一个足球比赛结果数据集,我希望通过创建一组类似于 World Football Elo 公式的运行评分来学习 R。我遇到了一些在 Excel 中看似简单的事情在 R 中并不完全直观的问题。例如,4270 个观察值中的前 15 个带有必要变量:
date t.1 t.2 m.result
1 19960406 DC SJ 0.0
2 19960413 COL KC 0.0
3 19960413 NE TB 0.0
4 19960413 CLB DC 1.0
5 19960413 LAG NYRB 1.0
6 19960414 FCD SJ 0.5
7 19960418 FCD KC 1.0
8 19960420 NE NYRB 1.0
9 19960420 DC LAG 0.0
10 19960420 CLB TB 0.0
11 19960421 COL FCD 1.0
12 19960421 SJ KC 0.5
13 19960427 CLB NYRB 1.0
14 19960427 DC NE 0.5
15 19960428 FCD TB 1.0
我希望能够创建一个新变量,该变量将是 t.1 和 t.2 的总比赛次数的运行计数(即,截至 t 列中出现“DC”的日期的实例。 1 或 t.2):
date t.1 t.2 m.result ##t.1m ##t.2m
1 19960406 DC SJ 0.0 1 1
2 19960413 COL KC 0.0 1 1
3 19960413 NE TB 0.0 1 1
4 19960413 CLB DC 1.0 1 2
5 19960413 LAG NYRB 1.0 1 1
6 19960414 FCD SJ 0.5 1 2
7 19960418 FCD KC 1.0 2 2
8 19960420 NE NYRB 1.0 2 2
9 19960420 DC LAG 0.0 3 2
10 19960420 CLB TB 0.0 2 2
11 19960421 COL FCD 1.0 2 3
12 19960421 SJ KC 0.5 3 3
13 19960427 CLB NYRB 1.0 3 3
14 19960427 DC NE 0.5 4 3
15 19960428 FCD TB 1.0 4 3
在 Excel 中,这是一个(相对)简单的 =SUMPRODUCT 方程,例如:
E4=SUMPRODUCT((A:A<=A4)*(B:B=B4))+SUMPRODUCT((A:A<=A4)*(C:C=B4))
其中 E4 是 obs # 4 的 t.1m,A:A 是日期,B:B 是 t.1,C:C 是 t.2,等等。
但是在 R 中,我可以为我打印总和产品(即“DC”在我的数据集中玩了 576 场游戏),但出于某种原因(可能是我是新手,不耐烦,因反复试验而焦躁不安)我'我只是迷失了如何对观察数据进行运行计数,尤其是如何将运行计数变为变量,这对于任何游戏评分指数都至关重要。我知道存在“PlayerRatings”,我觉得对于我的 R 教育,我应该能够在没有那个包的 R 套件中做到这一点。 plyr 或 dplyr 当然可以。
作为参考,这是我的数据供您复制/粘贴到您的 R 中。
date<-c(19960406,19960413,19960413,19960413,19960413,19960414,19960418,19960420,19960420,19960420,19960421,19960421,19960427,19960427,19960428)
t.1<-c("DC","COL","NE","CLB","LAG","FCD","FCD","NE","DC","CLB","COL","SJ","CLB","DC","FCD")
t.2<-c("SJ","KC","TB","DC","NYRB","SJ","KC","NYRB","LAG","TB","FCD","KC","NYRB","NE","TB")
m.result<-c(0.0,0.0,0.0,1.0,1.0,0.5,1.0,1.0,0.0,0.0,1.0,0.5,1.0,0.5,1.0)
mtable<-data.frame(date,t.1,t.2,m.result)
mtable
【问题讨论】:
-
相关:Running count based on field in R。那位给出的答案在我的大问题上的运行速度比下面接受的答案要快得多。
标签: r time-series cumulative-sum