如何创建包含嵌套xts对象的列-Yahoo数据?

问题描述

您好,我在数据框中有来自yahoo的不同股票的数据(列符号)。 我想创建一个dataframe(tibble),每只股票有1行,其中包含一列 将股票数据嵌套为xts对象。结果图片和可复制示例已添加。任何帮助表示赞赏

the result I get

library(purrr)
library(tidyverse)
library(tidyr)




  df<-structure(list(symbol = c("AAPL","AAPL","AMZN","MSFT","MSFT"),date = structure(c(18295,16700,17571,18305,18086,17834,17696,17438,16850,18016,18376,17935,18085,17626,17724),class = "Date"),adjusted = c(76.636299,26.198639,37.847511,80.852463,49.627182,1530.420044,1723.859985,961.349976,534.900024,1926.52002,173.645462,103.308533,134.968887,89.195686,101.034645)),row.names = c(NA,-15L),class = c("tbl_df","tbl","data.frame"))

df%>%group_by(symbol)%>%
  nest()%>%
  mutate(xts_obj=map(data,~as.xts(order_by=.$date)))

解决方法

在这里,我们可能需要通过进入xts对象来删除“日期”列

library(dplyr)
library(xts)
library(purrr)
ndf <- df %>% 
     group_by(symbol) %>%
     nest %>% 
     mutate(xts_obj = map(data,~ xts(.x %>% select(-date),order.by = .x$date)))
ndf
# A tibble: 3 x 3
# Groups:   symbol [3]
#  symbol data             xts_obj      
#  <chr>  <list>           <list>       
#1 AAPL   <tibble [5 × 2]> <xts [5 × 1]>
#2 AMZN   <tibble [5 × 2]> <xts [5 × 1]>
#3 MSFT   <tibble [5 × 2]> <xts [5 × 1]>

或者通过仅选择numeric列使其更加动态

df %>% 
    group_by(symbol) %>% 
    nest %>%
    mutate(xts_obj = map(data,~ .x %>% 
                select(where(is.numeric)) %>% 
                xts(.,order.by = .x$date)))

ndf$xts_obj[[1]]
#           adjusted
#2015-09-22 26.19864
#2018-02-09 37.84751
#2019-07-09 49.62718
#2020-02-03 76.63630
#2020-02-13 80.85246

根据OP的图像,它显示xts_obj列为带有list元素的0

ndf0$xts_obj[[1]]
#Data:
#numeric(0)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...