【问题标题】:Loop Over Names of Nested Lists to Create One Dataframe循环嵌套列表的名称以创建一个数据框
【发布时间】:2020-07-27 22:06:30
【问题描述】:

我有以下内容,它为每个证券的历史价格创建三个嵌套列表,例如 福特的价格 $F。

library(tseries)

tickers <- c('F','MSFT','GOOG')
 
end = Sys.Date()-1
Price <- list()
for(i in tickers){
  Price[[i]] <- get.hist.quote(i, end = Sys.Date()-1, 
                  quote = c("Open", "High", "Low", "Close", "Adjusted", "Volume"))
}

我想要一个数据框...

  1. 堆叠所有列表。
  2. 为证券代码/名称添加一列。
  3. 将日期添加为列。

所以输出看起来

请注意,我不能在这里使用tidyquant 等,但我不一定必须首先拥有这些列表。

【问题讨论】:

  • 你需要Reduce(merge, Price)

标签: r dataframe for-loop nested-lists


【解决方案1】:

由于您想要一个组合数据框,我们可以使用 fortify.zoozoo 对象转换为数据框,并使用 imap 添加新的列表名称列。

library(purrr)
Result <- imap_dfr(Price, ~.x %>% zoo::fortify.zoo() %>% mutate(Symbol= .y))


head(Result)
#       Index     Open     High      Low    Close Adjusted  Volume Symbol
#1 1991-01-02 4.812811 4.881240 4.630335 4.790002 1.689240 3109100      F
#2 1991-01-03 4.767192 4.858430 4.744383 4.744383 1.673152 3173400      F
#3 1991-01-04 4.767192 4.881240 4.744383 4.835621 1.705328 3211700      F
#4 1991-01-07 4.790002 4.790002 4.653145 4.653145 1.640976 3373900      F
#5 1991-01-08 4.698764 4.721573 4.630335 4.653145 1.640976 3045600      F
#6 1991-01-09 4.744383 4.812811 4.584716 4.584716 1.616845 5636200      F

tail(Result)
#           Index    Open     High      Low   Close Adjusted  Volume Symbol
#18902 2020-07-17 1521.62 1523.440 1498.420 1515.55  1515.55 1456700   GOOG
#18903 2020-07-20 1515.26 1570.290 1503.600 1565.72  1565.72 1557300   GOOG
#18904 2020-07-21 1586.99 1586.990 1554.280 1558.42  1558.42 1218600   GOOG
#18905 2020-07-22 1560.50 1570.000 1546.100 1568.49  1568.49  932000   GOOG
#18906 2020-07-23 1566.97 1571.870 1507.392 1515.68  1515.68 1627600   GOOG
#18907 2020-07-24 1498.93 1517.636 1488.400 1511.87  1511.87 1544000   GOOG 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2022-08-15
    • 1970-01-01
    • 2018-12-03
    • 2017-07-18
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多