我正在try 使用滑块函数来平均天气数据.我本质上想要以10天为增量进行绑定.所以1到10天,11到20天,21到30天.以下是一些示例数据:

historicalWeatherSummary <- structure(list(Historical_date = structure(c(3286, 3287, 3288, 
3289, 3290, 3291), class = "Date"), daily_min_temp_daytime = c(25.29, 
33.28, 39.33, 14.02, -2.47, 1.02), daily_min_temp_nighttime = c(25.45, 
29.82, 36.66, 6.3, -2.72, 1.18)), class = c("grouped_df", "tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -6L), groups = structure(list(
    Historical_date = structure(c(3286, 3287, 3288, 3289, 3290, 
    3291), class = "Date"), .rows = structure(list(1L, 2L, 3L, 
        4L, 5L, 6L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -6L), .drop = TRUE))

我正在使用下面的代码,我肯定没有正确使用它.

tenDayWindows <- historicalWeatherSummary %>%
  ungroup() %>%
  arrange(Historical_date) %>%
  mutate(`1to10_avg_min_daytime_temp` = slide_dbl(daily_min_temp_daytime, ~mean(.x), .after = 10, .complete = TRUE),
         `1to10_avg_min_nighttime_temp` = slide_dbl(daily_min_temp_nighttime, ~mean(.x), .after = 10, .complete = TRUE),
         `11to20_avg_min_daytime_temp` = slide_dbl(daily_min_temp_daytime, ~mean(.x), .step = 10, .after = 10,  .complete = TRUE),
         `11to20_avg_min_nighttime_temp` = slide_dbl(daily_min_temp_nighttime, ~mean(.x), .after = 10, .step = 10, .complete = TRUE),
         `21to30_avg_min_daytime_temp` = slide_dbl(daily_min_temp_daytime, ~mean(.x), .after = 10, .step = 20, .complete = TRUE),
         `21to30_avg_min_nighttime_temp` = slide_dbl(daily_min_temp_nighttime, ~mean(.x), .after = 10, .step = 20, .complete = TRUE),
         
         )

我的思维过程是,在步数为10和步数为20之后,它会计算出10行的平均值.有人能给我指个正确的方向吗?我正在查看指定日期后第1天到第10天、第11天到20天和第21天到30天的平均值.

编辑-添加的图像示例:

enter image description here

推荐答案

我想你可以用到这样的东西.

historicalWeatherSummary %>%
  ungroup() %>%
  arrange(Historical_date) %>%
  mutate(across(2:3, ~slider::slide_index_dbl(.x, Historical_date, mean , .after = 9), .names = "d1_10_{.col}"),
         across(2:3, ~slider::slide_index_dbl(.x, Historical_date, mean , .before = -2, .after = 19), .names = "d11_20_{.col}"),
         across(2:3, ~slider::slide_index_dbl(.x, Historical_date, mean , .before = -3, .after = 29), .names = "d21_30_{.col}"))
  1. 我会先解组,这样每次计算都可以看到其他行
  2. slider需要预先排序的数据,因此我添加了一个排列步骤,以防数据可能不完全按时间顺序排列
  3. slide_index_dbl使用Historical_date列来计算日期范围,如果您的数据可能有差距,这一点很有用.
  4. 如果我们希望开始范围从当前日期的after开始,我们可以使用带有负数的.before参数.出于演示的目的,我在示例数据上使用了-2-3,但您可能需要-10-20.
  5. 在第一种情况下,我使用.after = 9来使用10天的窗口,从9天后的窗口反映当前日期.

结果

  Historical_date daily_min_temp_daytime daily_min_temp_nighttime d1_10_daily_min_temp_daytime d1_10_daily_min_temp_nighttime d11_20_daily_min_temp_daytime d11_20_daily_min_temp_nighttime d21_30_daily_min_temp_daytime d21_30_daily_min_temp_nighttime
  <date>                           <dbl>                    <dbl>                        <dbl>                          <dbl>                         <dbl>                           <dbl>                         <dbl>                           <dbl>
1 1978-12-31                       25.3                     25.4                        18.4                            16.1                         13.0                             10.4                          4.19                             1.59
2 1979-01-01                       33.3                     29.8                        17.0                            14.2                          4.19                             1.59                        -0.725                           -0.77
3 1979-01-02                       39.3                     36.7                        13.0                            10.4                         -0.725                           -0.77                         1.02                             1.18
4 1979-01-03                       14.0                      6.3                         4.19                            1.59                         1.02                             1.18                       NaN                              NaN   
5 1979-01-04                       -2.47                    -2.72                       -0.725                          -0.77                       NaN                              NaN                          NaN                              NaN   
6 1979-01-05                        1.02                     1.18                        1.02                            1.18                       NaN                              NaN                          NaN                              NaN   

R相关问答推荐

如何将具有重复名称的收件箱合并到R中的另一列中,而结果不同?

单击 map 后,将坐标复制到剪贴板

如何使用shinyChatR包配置聊天机器人

R Highcharts与两个位置关联的注释

通过使用str_detect对具有相似字符串的组进行分组

如何编辑gMarginal背景以匹配绘图背景?

为什么我的基准测试会随着样本量的增加而出现一些波动?

如何写商,水平线,在一个单元格的表在R

在R gggplot2中是否有一种方法将绘图轴转换成连续的 colored颜色 尺度?

比较理论阿尔法和经验阿尔法

为左表中的所有行使用值Fill滚动左连接

在带有`R`中的`ggmosaic`的马赛克图中使用图案而不是 colored颜色

R:如果为NA,则根据条件,使用列名模式将缺少的值替换为另一列中的值

如何使这些react 表对象相互独立?

如何计算R glm probit中的线性预测因子?

在R中,如何从一系列具有索引名的变量快速创建数据帧?

将工作目录子文件夹中的文件批量重命名为顺序

通过R:文件名未正确写入[已解决]将.nc文件转换和导出为.tif文件

ggplot斜体轴刻度标签中的单个字符-以前的帖子建议不工作

对一个数据帧中另一个数据帧中的值进行计数