r - data.frame 中一个变量的滚动总和,以另一个变量定义的步数计算
问题描述
我试图以累积的方式总结 data.frame 中的值。
我有这个:
df <- data.frame(
a = rep(1:2, each = 5),
b = 1:10,
step_window = c(2,3,1,2,4, 1,2,3,2,1)
)
我试图b
在组内总结 , 的值a
。诀窍是,我想要与b
当前行后面的行数对应的值的总和,由step_window
.
这是我正在寻找的输出:
data.frame(
a = rep(1:2, each = 5),
step_window = c(2,3,1,2,4,
1,2,3,2,1),
b = 1:10,
sum_b_step_window = c(3, 9, 3, 9, 5,
6, 15, 27, 19, 10)
)
我尝试使用 来执行此操作,RcppRoll
但出现错误Expecting a single value
:
df %>%
group_by(a) %>%
mutate(sum_b_step_window = RcppRoll::roll_sum(x = b, n = step_window))
解决方案
我不确定在任何滚动功能中是否可以使用可变窗口大小。这是使用以下方法执行此操作的一种方法map2_dbl
:
library(dplyr)
df %>%
group_by(a) %>%
mutate(sum_b_step_window = purrr::map2_dbl(row_number(), step_window,
~sum(b[.x:(.x + .y - 1)], na.rm = TRUE)))
# a b step_window sum_b_step_window
# <int> <int> <dbl> <dbl>
# 1 1 1 2 3
# 2 1 2 3 9
# 3 1 3 1 3
# 4 1 4 2 9
# 5 1 5 4 5
# 6 2 6 1 6
# 7 2 7 2 15
# 8 2 8 3 27
# 9 2 9 2 19
#10 2 10 1 10
推荐阅读
- javascript - 每次 MySQL 表刷新时刷新 div
- python - Selenium 打开新标签而不是下载
- node.js - 为什么我的 Node.js 应用程序在 Mac 上安装后没有显示在桌面上?
- php - php html dom 数组按数组替换或 preg_replace
- r - 如何在R中组合两列不同数据集?
- php - 谷歌身份验证的身份验证状态参数无效
- python - 修复在 pandas 中读取 csv/txt 时下载的坏行
- c# - Xamarin android 崩溃调试
- fortran - 开放式加速器 | Fortran 90:并行化嵌套 DO 循环的最佳方法是什么?
- flutter - Flutter/ 从 URL 获取 PDF 文件