r - 在 dplyr 语句中循环平均周期
问题描述
我正在尝试计算 R dplyr 语句中滚动平均周期的变化。
library(dplyr)
data <- tibble(a=seq(1:1000), b=runif(1000), c=rep(c('x','y','Z','q'), 250))
# Rolling mean calculation
augment <- data %>% group_by(c) %>% mutate(mean = rollmean(a, 10, na.pad=TRUE, align='left')) %>%
ungroup() %>% drop_na() %>% group_by(c) %>% dplyr::summarize(cor = cor(mean,b)) %>%
mutate(ndays = 10)
我想做的是循环/迭代 10 的滚动周期并用 seq(10,35) 替换 10。
上述语句的输出是:
# A tibble: 4 x 3
c cor ndays
<chr> <dbl> <dbl>
1 q 0.0107 10
2 x 0.0118 10
3 y -0.0908 10
4 Z -0.0508 10
所需的输出是一个 tibble,其中包含 10 到 35 个平均周期中每一个的 ndays 条目以及相关的相关性。
我尝试插入一个 mutate 语句来添加一个 ndays 变量,但尺寸不正确。对该尝试的不同迭代不起作用。
如何在 dplyr 和相关软件包中实现这一点?
谢谢!
解决方案
您可以做的一件快速的事情是purrr
将函数应用于从 10 到 35 的每个值:
library(tidyverse)
library(zoo)
data <- tibble(a=seq(1:1000), b=runif(1000), c=rep(c('x','y','Z','q'), 250))
10:35 %>%
map_df(~{
data %>%
group_by(c) %>%
mutate(mean = rollmean(a, .x, na.pad=TRUE, align='left')) %>%
ungroup() %>%
drop_na() %>%
group_by(c) %>%
dplyr::summarize(cor = cor(mean,b)) %>%
mutate(ndays = .x)
})
#> # A tibble: 104 x 3
#> c cor ndays
#> <chr> <dbl> <int>
#> 1 q 0.0519 10
#> 2 x -0.123 10
#> 3 y 0.0347 10
#> 4 Z -0.116 10
#> 5 q 0.0571 11
#> 6 x -0.111 11
#> 7 y 0.0379 11
#> 8 Z -0.124 11
#> 9 q 0.0498 12
#> 10 x -0.103 12
#> # … with 94 more rows
由reprex 包(v0.3.0)于 2020 年 4 月 2 日创建
推荐阅读
- pandas - 如何使用熊猫中的列名和行名从单元格中选择一个值
- javascript - Javascript:getElementbyID 宽度问题
- python - 在读取python中的输入之前添加空格
- azure-active-directory - 带有 Azure AD 的 Identity Server 4 -“我们无法让您登录。请重试。”
- python - 错误:使用 import twitter 时未定义名称 Twitter
- javascript - 可以在 for c3.js 循环中显示多个带有阈值的图表
- django - API 在 flutter_web 中不起作用(启用 CORS)
- c++ - 有没有办法检测对象实例是否被删除(在 lambda 中)?
- javascript - 以 MB 为单位的 Javascript 对象大小小于特定大小(小)
- javascript - 如何将参数插入 netlify 函数?