首先,您应该考虑添加require(foreign)
到您的示例代码中,因为它是运行您的代码所必需的。
我对文件或它们的格式一无所知*.dta
,但我可以告诉你,如果你想在 中使用时间序列R
,你最好研究一下zoo
andxts
系列函数。
考虑到这一点,请尝试以下操作:
require(xts)
require(foreign)
tsMloa <- ts(read.dta("http://www.stata-press.com/data/r12/mloa.dta"), frequency=12, start=1959)
tt <- seq(as.Date("1959-01-01"), as.Date("1990-12-01"), by='mon')
tsMloa_x <- xts(unclass(tsMloa)[,1:3], order.by=tt)
tsMloa_x$meanLog <- tsMloa_x$log - mean(tsMloa_x$log)
那应该可以满足您的需求-它使您有理由研究非常好的软件包。
用zoo
-- 加上我创建了一个函数来把你的整数变成月份。
require(foreign)
require(zoo)
Mloa <- read.dta("http://www.stata-press.com/data/r12/mloa.dta"), frequency=12, start=1959)
intToMonth <- function(intMonth, origin = "1960-01-01"){
dd <- as.POSIXlt(origin)
ddVec <- rep(dd, length(intMonth))
ddVec$mon <- ddVec$mon + intMonth%%12
ddVec$year <- ddVec$year + intMonth%/%12
ddRet <- as.Date(ddVec)
return(ddRet)
}
dateString <- intToMonth(Mloa[, 'tm'])
zMloa <- zoo(Mloa[, -2], dateString)
zMloa$meanLog <- zMloa$log - mean(zMloa$log)
正如我所看到的,您的问题是将源文件中的时间戳转换为 R 可以理解并可以使用的东西。我发现适应 R 的这一部分特别棘手。
上述函数将获取您的月份整数,并将它们转换为一个Date
对象。结果输出将与zoo
和xts
作为order.by
参数一起使用。
如果您需要更改原始日期,只需向函数提供第二个参数 - 即otherDateString <- intToMonth(timeInts, "2011-01-01")
.