首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mutate_at将sw_glance应用于嵌套的时间序列数据帧?

如何使用mutate_at将sw_glance应用于嵌套的时间序列数据帧?
EN

Stack Overflow用户
提问于 2019-09-29 22:07:14
回答 1查看 131关注 0票数 2

我在一个嵌套(分组)的df上预测了几个模型。如果我对每个列表列分别应用sw_glance,我的问题就解决了,但是,对于我的示例,如果我应用6个模型,那么它会要求我变异6次。我已经花了无数的时间,我想我就快做到了。为什么我不能做下面这一行,并用函数带来的新值覆盖现有的变量?(我在下面添加了reprex,其中步骤5是我被卡住的地方)

代码语言:javascript
复制
models_df%<>% map(~mutate_at(.x,vars(mod_ets,mod_hw)),sw_glance)

仅举几个例子,下面是列表:

-tidyverse文档中提到,对于分组的变量,除非我添加-group_cols(),否则mutate_at将失败。不行。

-purrr文档:我尝试使用pmap传递一个变量列表。我尝试将map与mutate_at结合使用。我单独尝试了mutate_at。我已经尝试给函数命名(.f ...)和匿名的一个(~..),但什么都没有

-I在这里尝试了几篇文章,几乎让我如愿以偿。我升级到了tidyr 1.0,如果需要,可以包含我的sessionInfo()。

代码语言:javascript
复制
#1 dummy df
df=tibble(Tag=seq(as.Date("2010-01-01"),by="month", length.out = 60), gatos=sample(c("a","b"),60, replace = T), sales=runif(60))

#2 nesting 
nested_df= df %>% 
  group_by(gatos) %>% 
  nest()

#3 declaring time series
ts_vector = nested_df %>%
  mutate(data.ts=map(data,tk_ts,select=-Tag,start=c(2010,01),freq=12))

# Step 4: Apply models
models_df = ts_vector %>% 
  mutate(mod_ets = map(data.ts,ets),
         mod_hw = map(data.ts,HoltWinters))

# Step 5: Apply sw_glance (Does NOT work)
models_df %<>%
map(~mutate_at(.x,vars(mod_ets,mod_hw)),sw_glance)

Error in UseMethod("tbl_vars") : 
  no applicable method for 'tbl_vars' applied to an object of class "character"

# This DOES work
models_df %<>% 
  mutate(foo_ets=map(mod_ets,sw_glance),
         foo_hw=map(mod_hw,sw_glance))

我期望mutate_at在不添加新变量的情况下修改现有的变量。否则,如果可能的话,我会很欣赏如何在几个模型上应用sw_glance。谢谢你们。我真的很感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-30 11:46:51

我们可以编写一个函数来将sw_glance应用于每个模型

代码语言:javascript
复制
library(tidyverse)

apply_models <- function(list_model) map(list_model, sweep::sw_glance)

并使用mutate_at将其应用于多个列

代码语言:javascript
复制
models_df %>% mutate_at(vars(mod_ets, mod_hw), apply_models)

#  gatos           data data.ts mod_ets           mod_hw           
#  <chr> <list<df[,2]>> <list>  <list>            <list>           
#1 b           [31 × 2] <ts>    <tibble [1 × 12]> <tibble [1 × 12]>
#2 a           [29 × 2] <ts>    <tibble [1 × 12]> <tibble [1 × 12]>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58155997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档