require(foreign)
まず、コードを実行する必要があるため、サンプルコードに追加することを検討する必要があります。
*.dta
ファイルやそのフォーマットについては何も知りませんが、で時系列を操作したい場合は、関数のファミリーR
を調べるとよいでしょうzoo
。xts
それを念頭に置いて、次のことを試してください。
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
起点の日付を変更する必要がある場合は、関数に2番目の引数を指定するだけotherDateString <- intToMonth(timeInts, "2011-01-01")
です。