[英]How to create a running total, according to factor, in R?
我希望为体育数据创建一个跑分线。 例如,考虑我的数据如下:
df <- data.frame(Club = c("O", "H", "H", "O", "H", "O", "O"),
TimeOfScore = c("1:30", "2:06", "7:09", "9:09", "11:08", "14:32", "19:11"),
Points = c(1, 3, 1, 2, 2, 3, 3))
在上文中, "df$Club==O"
表示反对派的得分,而df$Club=="H"
。 df$TimeOfScore
列表示分数发生的时间。 我想知道对手在主队前方或下方有多少分的得分线。
我的预期输出是:
df$Margin <- c(-1, 2, 3, 1, 3, 0, -3)
此输出基于反对队前方或下方与主队相比多少分。 例如,对手队在1:30(1分30秒)得分1分,进入比赛。 该时间点的相应保证金为-1或主队减少一个点。 在下一次比赛中,主队得分为3分,然后是领先优势的2分。
我该怎么做呢?
df$Margin = with(df, cumsum(ifelse(Club == "H", Points, -Points)))
# df
# Club Points Margin
# 1 O 1 -1
# 2 H 3 2
# 3 H 1 3
# 4 O 2 1
# 5 H 2 3
# 6 O 3 0
# 7 O 3 -3
您可以测试Club
是“H”还是“O”,这将是真或假。
然后,您可以使用T == 1
和F == 0
的事实向其添加1。
然后使用此结果对向量c(-1, 1)
进行子集化,然后将此值乘以points
。
然后找到累积总和,这是你的答案。
df$Margin <- cumsum(c(-1, 1)[(df$Club == "H")+1] * df$Points)
df
# Club Points Margin
# 1 O 1 -1
# 2 H 3 2
# 3 H 1 3
# 4 O 2 1
# 5 H 2 3
# 6 O 3 0
# 7 O 3 -3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.