首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tq_transmute产生奇怪错误的时间,列显然存在但却不存在

tq_transmute产生奇怪错误的时间,列显然存在但却不存在
EN

Stack Overflow用户
提问于 2021-01-14 13:22:30
回答 1查看 73关注 0票数 0

我可以在一周前发誓这段代码是有效的,但我猜我错了。我一直收到错误:错误:无法对不存在的列进行子集。X列asset不存在。运行rlang::last_error()查看错误发生的位置。此外:警告消息:对于未分组的数据帧,...不能为空。你想要data = everything()

我已经一步一步地尝试并查看它在我的代码中的位置,我可以告诉它是在我对资产进行分组之后,当我开始在tq_transmute上添加时发生的。如果有人能帮上忙,我将不胜感激。我会有代码,你应该能够自动运行,看看我在说什么。这没有任何意义,因为在收集数据并对其进行分组后,“资产”确实存在。

代码语言:javascript
复制
library(tidyverse)
library(lubridate) 
library(readxl)
library(highcharter) 
library(tidyquant) 
library(timetk) 
library(tibbletime) 
library(quantmod) 
library(PerformanceAnalytics)
library(scales)
library(magrittr)
library(broom)
library(purrr)

symbols <- c("SPY", "EFA", "IJS", "EEM", "AGG")

prices <- getSymbols(symbols,
                     src = 'yahoo',
                     from = "2012-12-31",
                     to = "2017-12-31",
                     auto.assign = TRUE,
                     warnings = FALSE) %>%
  map(~Ad(get(.)))%>% #the period here in get(.) refers to our intial object
  reduce(merge) %>%
  `colnames<-`(symbols)


# WHERE MY PROBLEM OCCURS 
asset_returns_tbltime <-
  prices %>% 
  tk_tbl(preserve_index = TRUE,
                    rename_index = "date")%>%
  # this is the the tibbletime function
  as_tbl_time(index = date) %>% 
  as_period(period = "month",
            side = "end") %>%
  gather(asset, returns, -date) %>%
  group_by(asset) %>% 
  tq_transmute(mutate_fun = periodReturn, #GETTING THE ERROR SOMEWHERE IN HERE
                                   type = "log") %>%
  spread(asset, monthly.returns) %>%
  select(date, symbols) %>%
  slice(-1)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-14 13:46:28

gather已替换为pivot_longerspread已替换为pivot_wider。如果您将gather代码更改为pivot_longer,则可以正常工作。不过,我不太确定为什么在gather上失败了。

代码语言:javascript
复制
prices %>% 
  tk_tbl(preserve_index = TRUE,
         rename_index = "date")%>%
  as_tbl_time(index = date) %>% 
  as_period(period = "month",
            side = "end") %>%
  pivot_longer(cols = -date, names_to = 'asset', values_to = 'returns') %>%
  group_by(asset) %>%
  tq_transmute(mutate_fun = periodReturn, type = "log")  %>%
  pivot_wider(names_from = asset, values_from = monthly.returns) %>%
  select(date, symbols) %>%
  slice(-1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65713816

复制
相关文章

相似问题

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