【发布时间】:2020-11-30 19:29:54
【问题描述】:
有一个如下所示的 data.frame:
library(dplyr)
test <- data.frame("name" = c("Scott","Scott","Scott","Scott","Scott","Scott"),
"minutes" = c(100, 50, 150, 200, 100, 250),
"grade" = c(2, 1.5, 2.5, 3, 2.2, 2.8))
我想使用 cumsum 为每一行做一个加权成绩,它显示了他们的平均成绩加权分钟数 - 但是我希望样本只包括占 400 分钟的最新行。
这是一个使用 cumsum 的 weighted_grade 代码示例:
test <- test %>%
mutate(weighted_grade = cumsum(grade*minutes)/cumsum(minutes))
这对整个样本进行了很好的加权评分,但我只寻找占 400 分钟的最新行。我研究了滚动总和,但这些是基于行数而不是小时数。
明确地说,我希望新列的前 3 行返回 NA(因为前 3 行加起来为 300 分钟,因此不相关);第 4 行将返回第 2、3 和 4 行的 weighted_grade(总共 400 分钟,因此第 1 行无关紧要);第 5 行将返回第 3、4 和 5 行的 weighted_grade(450 分钟);等等……
【问题讨论】:
-
例子中,没有400以上的
标签: r