这是我想要达到的结果:
Trade Time Last Yesterday Close
GLD 2011-03-04 04:00:00 139.3500 138.09
SLV 2011-03-04 04:00:00 34.6925 33.42
获取前两列,
require("quantmod")
intra <- getQuote("GLD;SLV", what=yahooQF("Last Trade (Price Only)"))
>intra
Trade Time Last
GLD 2011-03-04 04:00:00 139.3500
SLV 2011-03-04 04:00:00 34.6925
> class(intra)
[1] "data.frame"
要结束昨天,
require("quantmod")
getSymbols("GLD;SLV")
GLD <- GLD[,4] #only the close
SLV <- SLV[,4]
GLD <- head(tail(GLD, n=2), n=1) #only yesterday
SLV <- head(tail(SLV, n=2), n=1)
GLD <- as.vector(GLD) #prepare for merge with intra data.frame
SLV <- as.vector(SLV)
EOD <- rbind(GLD, SLV)
> EOD
[,1]
GLD 138.09
SLV 33.42
> class(EOD)
[1] "matrix"
然后,天真的merge()方法
> super <- merge(intra, EOD)
> class(super)
[1] "data.frame"
> super
Trade Time Last [,1]
1 2011-03-04 04:00:00 139.3500 138.09
2 2011-03-04 04:00:00 34.6925 138.09
3 2011-03-04 04:00:00 139.3500 33.42
4 2011-03-04 04:00:00 34.6925 33.42
关闭,但有些事情是非常错误的。首先,我丢失了内部data.frame上的描述性GLD和SLV标签。其次,我有四行而不是两行(神秘复制)。
欢迎重构提示。
答案 0 :(得分:2)
这是你的意思吗?
intra$YesterdayClose <- EOD
intra
Trade.Time Last YesterdayClose
GLD 2011-03-04 04:00:00 139.3500 138.09
SLV 2011-03-04 04:00:00 34.6925 33.42
这假设EOD
中的顺序与数据框中的顺序相同,如果不是这样,那么您可以这样做:
intra$YesterdayClose <- EOD[match(rownames(EOD),rownames(intra))]