繁体   English   中英

如何根据因子在R中创建一个运行总计?

[英]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 == 1F == 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM