我正在尝试在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
答案 0 :(得分:0)
您可以通过多种方式执行此操作。一种方法是确保第一个条目始终为0,然后取cumsum
中的score
并忽略最后一个条目。
library(dplyr)
df %>%
group_by(round_id) %>%
mutate(cum_score = c(0, head(cumsum(score), -1)))
# round_id score_id hole_number score cum_score
# <int> <int> <int> <int> <dbl>
#1 1 100 1 4 0
#2 1 101 2 5 4
#3 1 102 3 4 9
#4 1 103 4 4 13
#5 2 150 1 6 0
#6 2 151 2 4 6
数据
df <- structure(list(round_id = c(1L, 1L, 1L, 1L, 2L, 2L), score_id =
c(100L,101L, 102L, 103L, 150L, 151L), hole_number = c(1L, 2L, 3L, 4L,
1L, 2L), score = c(4L, 5L, 4L, 4L, 6L, 4L)), .Names = c("round_id",
"score_id", "hole_number", "score"), row.names = c(NA, -6L), class =
"data.frame")