【发布时间】:2018-12-21 14:01:30
【问题描述】:
我正在尝试在 R 中创建一个回归模型,以预测高尔夫球手下一洞的得分。一个已被证明是“接下来会发生什么”的良好指标的输入参数是前一个洞的累积分数,但我无法以编程方式添加此列。例如,在第 1 洞,玩家的累积得分为 0,玩家在第一个洞获得 5,因此第 2 洞的累积得分为 5 (0 + 5) 等等。
我已经能够使用 dplyr 成功地将一列 (cum_score) 添加到数据框中,但它并不完全符合我需要的上下文。我的代码将在第 1 洞开始“累积”,因此在这种情况下,第 1 洞的累积分数是 5,而它需要为零。本质上,我需要跳过第一次观察,然后开始运行总计。
我使用的东西
scores <- scores %>% group_by(round_id) %>% mutate(cum_score = cumsum(score))
round_id score_id hole_number score cum_score
1 100 1 4 4
1 101 2 5 9
1 102 3 4 13
1 103 4 4 17
...
2 150 1 6 6
2 151 2 4 10
...
我可以通过运行以下命令获得我想要的结果,但随后我丢失了第 1 洞的数据,并且不确定如何将 cum_score 列“插入”回数据框中
scores %>% group_by(round_id) %>% filter(hole_number > 1) %>% mutate(cum_score = cumsum(score))
我想创造什么
round_id score_id hole_number score cum_score
1 100 1 4 0
1 101 2 5 4
1 102 3 4 9
1 103 4 4 13
...
2 150 1 6 0
2 151 2 4 6
...
首先,感谢您到目前为止的回复,但到目前为止给出的答案将跳过第一行。下面是一个更好的数据示例
round_id score_id hole_number score cum_score(what i need) what the answers output
1 100 1 4 0 0
1 101 2 4 4 4
1 102 3 4 8 8
1 103 4 3 12 11
1 104 5 4 15 15
【问题讨论】:
-
你可以使用
lag,比如mutate(cum_score = cumsum(lag(score, default = 0))) -
谢谢@phiver,但这也给了我跳过第一行的问题,我确实需要它落后但不要失去第一洞的分数。
标签: r dplyr regression