【问题标题】:Format quantmod GetSymbol data so that multiple Symbols are in one data frame格式化 quantmod GetSymbol 数据,使多个 Symbols 在一个数据帧中
【发布时间】:2018-03-30 15:41:30
【问题描述】:

我有一些格式如下的股票数据(从另一个来源获得):

 Company,Date,Close
 AXP,2011-06-03,49.28
 AXP,2011-06-04,49.28
 CAT,2011-06-03,101.1
 CAT,2011-06-04,101.1

我想要做的是添加音量。如果您使用GetSymbols 命令下载股票数据,则交易量是其中的一部分。

问题是使用GetSymbols 命令获得的数据结构完全不同。见:

是否有可能以某种方式更改格式,以便我拥有上述格式的数据?我希望结果表看起来像这样:

 Company,Date,Close,Volume
 AXP,2011-06-03,49.28,5000000
 AXP,2011-06-04,49.28,3500000
 CAT,2011-06-03,101.1,1000000
 CAT,2011-06-04,101.1,3000000

提前致谢!!

【问题讨论】:

  • 有两点不清楚。 1. 从哪里获得AXPCAT 信息? 2. 日期完全不匹配。一个地方是 2011 年,另一个地方是 2007 年。如何链接?
  • 1.我有AXPCAT 和其他信息的单独表格。 2. 日期从 2007 年到 2018 年,这只是一个例子。我的问题基本上是我想将所有这些单独的表放在一个表中,并添加一个带有AXPCAT 等的列。

标签: r finance quantmod quantitative-finance


【解决方案1】:

一种方法:

  • 创建代码向量
  • 使用与原始数据框对应的列名启动新的空数据框

循环股票代码:

  • 强化getSymbols创建的xts并提取volume列并添加一个新的Company
  • rbind 股票代码
  • merge 原始数据框和 Company,Date 列的新数据框

代码 sn-p 假定您导入的 Data 是 dataframe 对象并命名为 dfOrig

tickers <- c('AXP','CAT')
getSymbols(c("AXP","CAT"), from = '2018-03-01')
dfNew <- data.frame(Company = character(),
                 Date=as.Date(character()),
                 Close=numeric(),
                 Volume=numeric(), 
                 stringsAsFactors=FALSE) 
for(i in 1:length(tickers)){
  dfSym <- cbind(Company=rep(tickers[i],nrow(get(tickers[i]))),fortify.zoo(get(tickers[i])[,5]))
  names(dfSym)[2:3] <- c('Date','Volume')
  dfNew <- rbind(dfNew,dfSym)
}

dfNew的前几行:

> head(dfNew)
  Company       Date  Volume
1     AXP 2018-03-01 4369800
2     AXP 2018-03-02 3584700
3     AXP 2018-03-05 2661400
4     AXP 2018-03-06 3221100
5     AXP 2018-03-07 3594900
6     AXP 2018-03-08 3760500

现在您可以通过CompanyDate 合并数据帧。

> merge(dfOrig,dfNew,by = intersect(names(dfOrig), names(dfNew)))
   Company       Date  Close   Volume
1      AXP 2018-03-01  95.14  4369800
2      AXP 2018-03-02  95.60  3584700
3      AXP 2018-03-05  96.66  2661400
4      AXP 2018-03-06  96.07  3221100
5      AXP 2018-03-07  95.64  3594900
6      AXP 2018-03-08  96.59  3760500
7      AXP 2018-03-09  99.05  3044300
8      AXP 2018-03-12  97.67  4020900
9      AXP 2018-03-13  95.37  4858700
10     AXP 2018-03-14  94.53  3013800
11     AXP 2018-03-15  94.39  3213000
12     AXP 2018-03-16  95.61  5124900
13     AXP 2018-03-19  94.84  2610400
14     AXP 2018-03-20  94.95  2501600
15     AXP 2018-03-21  94.74  2124000
16     AXP 2018-03-22  91.41  4113900
17     AXP 2018-03-23  90.45  5100400
18     AXP 2018-03-26  92.62  2769800
19     AXP 2018-03-29  93.28  4914600
20     CAT 2018-03-01 150.23  9434800
21     CAT 2018-03-02 146.38  9509400
22     CAT 2018-03-05 151.12  8453000
23     CAT 2018-03-06 153.75  5795600
24     CAT 2018-03-07 151.51  5491000
25     CAT 2018-03-08 153.59  4105000
26     CAT 2018-03-09 158.25  4576700
27     CAT 2018-03-12 154.50  4880400
28     CAT 2018-03-13 153.69  4819100
29     CAT 2018-03-14 152.54  4873600
30     CAT 2018-03-15 154.57  5268800
31     CAT 2018-03-16 156.46 10897600
32     CAT 2018-03-19 152.15  5479200
33     CAT 2018-03-20 154.06  3557600
34     CAT 2018-03-21 155.80  3887400
35     CAT 2018-03-22 146.90  8225600
36     CAT 2018-03-23 144.29  6533100
37     CAT 2018-03-26 149.19  5454900
38     CAT 2018-03-27 146.99  4915300
39     CAT 2018-03-28 145.16  4933900
40     CAT 2018-03-29 147.38  4179000

【讨论】:

    【解决方案2】:

    您可以为此使用tidyquant

    library(tidyquant)
    
    ticks <- c("AXP","CAT")
    sd <- as.Date("2011-06-03")
    ed <- as.Date("2011-06-10")
    
    tq_get(ticks, 
           from = sd, 
           to = ed ) %>%
      select(symbol, date, close,volume) %>% 
      arrange(date)
    

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 1970-01-01
      • 2020-03-03
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      相关资源
      最近更新 更多