【发布时间】:2014-08-17 03:11:25
【问题描述】:
我有一个从工作目录导入的大型时间序列文件,然后通过以下方式将它们转换为日志返回:
read.csv("/Volumes/3TB/ALLsince1996.csv",header=T)-> ALL
all <- xts(ALL[,2:dim(ALL)[2]], order.by= as.POSIXct(ALL[,1], format="%m/%d/%y"))
RETS <- CalculateReturns(all, method= c("log"))
RETS<- na.locf(RETS)
RETS[is.na(RETS)] <- 0
然后我通过 FRED 通过以下方式下载 3-Month Treaury:
# 3-Mo Treasury
data <- new.env()
FEDs <- c( "DGS3MO") # DGS3MO : 3-Mo Treasury Constant maturity
getSymbols( FEDs
, src = "FRED"
, env = data
)
data$DGS3MO -> TB3
TB3/100/365 -> TB3
na.locf(TB3["1996-01-01::"])-> TB3
然后我尝试使用cbind() 将日志返回系列与 3 个月国库相结合,得到以下结果:
both <- cbind(RETS[,1], TB3)
两者:
row.names ZX.Adjusted DGS3MO
1 1995-12-31 16:00:00 NA NA
2 1996-01-01 00:00:00 0 NA
3 1996-01-01 16:00:00 NA 0.0001424658
4 1996-01-02 00:00:00 0 NA
5 1996-01-02 16:00:00 NA 0.0001424658
6 1996-01-03 00:00:00 0 NA
7 1996-01-03 16:00:00 NA 0.0001421918
8 1996-01-04 00:00:00 0 NA
9 1996-01-04 16:00:00 NA 0.0001421918
但这会返回一个每天两次的向量;例如 1996-01-01 00:00:00 和 1996-01-01 16:00:00 。我想要的是按日期而不是按时间将两者结合起来。
可重复的数据:
#Pull Data from getSymbols()
library(quantmod)
dataset<- xts()
symbols <- c( "GLD", "IWM", "SPY", "GS")
system.time(
for(i in 1:length(symbols)) {
symbols[i]-> symbol
tryit <- try(getSymbols(symbol, from="1995-12-31", src='yahoo'))
if(inherits(tryit, "try-error")){
i <- i+1
} else {
data <- getSymbols(symbol, from="1995-12-31", src='yahoo')
dataset <- merge(dataset, Ad(get(symbols[i])))
rm(symbol)
}
}
)
因为它是一个大文件,我将 dataset 和 index(dataset) 保存在两个单独的文件中,因为我无法将索引与数据集一起保存
write.csv(dataset, "dataset.csv")
write.csv(index(dataset), "index.csv")
我后来在 Excel 中打开了 index.csv 文件并手动将索引粘贴到 dataset.csv 并保存了文件。我后来尝试将 .csv 重新打开到我的工作区并计算日志返回
read.csv("dataset.csv",header=T)-> ALL
all <- xts(ALL[,2:dim(ALL)[2]], order.by= as.POSIXct(ALL[,1], format="%m/%d/%y"))
RETS <- CalculateReturns(all, method= c("log"))
RETS<- na.locf(RETS)
RETS[is.na(RETS)] <- 0
下一步下载 3-Month T-Bill,代码同上...
# 3-Mo Treasury
data <- new.env()
FEDs <- c( "DGS3MO") # DGS3MO : 3-Mo Treasury Constant maturity
getSymbols( FEDs
, src = "FRED"
, env = data
)
data$DGS3MO -> TB3
TB3/100/365 -> TB3
na.locf(TB3["1996-01-01::"])-> TB3
现在尝试将RETS1 与TB3 结合起来......
both <- cbind(RETS1, TB3)
【问题讨论】:
-
您介意让您的示例可重现吗?这将有助于我们了解您的问题:stackoverflow.com/questions/5963269/…。基本上,给我们一个示例,这样我们就可以从这里复制并粘贴到我们的 R 工作区中,并获得与您相同的结果。
-
你试过合并功能吗?您可以在两个 data.frames 中指定合并列。
-
@mgriebe 我也尝试过
merge(x,y, join='left'),但不起作用,