格式化 quantmod GetSymbol 数据,使多个符号在一个数据帧中
Format quantmod GetSymbol data so that multiple Symbols are in one data frame
我有一些股票数据的格式如下(从其他来源获取):
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
命令获得的数据结构完全不同。参见:
是否可以通过某种方式更改格式以便我拥有上述格式的数据?我希望结果 table 看起来像这样:
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
提前致谢!!
一种方法:
- 创建代码向量
- 启动一个新的空数据框,其列名与原始数据框相对应
遍历股票代码:
- 强化由
getSymbols
创建的 xts 并提取体积列并添加新的 Company
列
rbind
代码
merge
原始数据框和 Company,Date
列的新数据框
代码片段假定您导入的数据是一个 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
现在您可以通过Company
和Date
合并数据帧。
> 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
您可以为此使用 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)
我有一些股票数据的格式如下(从其他来源获取):
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
命令获得的数据结构完全不同。参见:
是否可以通过某种方式更改格式以便我拥有上述格式的数据?我希望结果 table 看起来像这样:
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
提前致谢!!
一种方法:
- 创建代码向量
- 启动一个新的空数据框,其列名与原始数据框相对应
遍历股票代码:
- 强化由
getSymbols
创建的 xts 并提取体积列并添加新的Company
列 rbind
代码merge
原始数据框和Company,Date
列的新数据框
代码片段假定您导入的数据是一个 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
现在您可以通过Company
和Date
合并数据帧。
> 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
您可以为此使用 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)