【问题标题】:Set up ouput-list names in slider::slide_index()在 slider::slide index() 中设置输出列表名称
【发布时间】:2022-01-24 23:58:21
【问题描述】:

slider::slider_index() 使用类似purrr::map() 的语法在滚动(此处为)窗口上应用函数。这个函数的输出是一个列表。我的问题是,如何设置此列表的名称?

slider_index() 函数没有像 slider_index_dfr() 这样的 .names_to 参数。

请参阅下面的可重现示例:

library(slider)
library(lubridate)
library(dplyr)

storms_summary <- storms %>% 
  # filter dataset so it does not eat all memory and save computing time ;)
  filter(year <= 2000 & year >= 1999) %>% 
  # make a date column to mimic my real data
  mutate(storm_date = as.Date(paste(year, month, day, sep = "-"))) %>% 
  arrange(storm_date) %>% 
  slider::slide_index(
    .x = .,
    .i = .$storm_date,
    .f = ~ summary(.x),
    .after = lubridate::weeks(2),
    .complete = TRUE
  )

预期的输出是列表storms_summary,其名称是字符串,表示汇总期间的第一个和最后一个日期。通过下面的代码,我们得到:

> names(storms_summary)
NULL

【问题讨论】:

    标签: r list rolling-computation


    【解决方案1】:

    如果无法在函数中分配名称,我们可以自己创建名称并使用setNames 进行分配。

    library(slider)
    library(lubridate)
    library(dplyr)
    
    storms_summary <- storms %>% 
      # filter dataset so it does not eat all memory and save computing time ;)
      filter(year <= 2000 & year >= 1999) %>% 
      # make a date column to mimic my real data
      mutate(storm_date = as.Date(paste(year, month, day, sep = "-"))) %>% 
      arrange(storm_date) %>% 
      mutate(sliding_output = slider::slide_index(.x = cur_data(), 
        .i = storm_date,
        .f = ~summary(.x),
        .after = lubridate::weeks(2),
        .complete = TRUE
      ), 
      names = slider::slide_index_chr(.x = storm_date, 
                                  .i = storm_date, 
                                  .f = ~paste0(range(.x), collapse = '-'),
                                  .after = lubridate::weeks(2)), 
      sliding_output = setNames(sliding_output, names)) %>%
      select(-names)
    
    names(storms_summary$sliding_output)
    
    # [1] "1999-07-02-1999-07-03" "1999-07-03-1999-07-03" "1999-07-03-1999-07-03"
    # [4] "1999-07-03-1999-07-03" "1999-08-24-1999-09-07" "1999-08-24-1999-09-07"
    # [7] "1999-08-24-1999-09-07" "1999-08-25-1999-09-08" "1999-08-25-1999-09-08"
    #[10] "1999-08-25-1999-09-08" "1999-08-25-1999-09-08" "1999-08-26-1999-09-09"
    #...
    #...
    

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 2022-01-13
      • 2019-12-21
      • 2021-12-02
      • 2020-03-14
      • 2018-09-09
      • 2014-09-03
      • 1970-01-01
      • 2018-06-29
      相关资源
      最近更新 更多