0

Rの関数を使用して作成したオブジェクトがあります。as.ts次に、変数の1つを変換して、同じtsオブジェクトに追加する簡単な方法が必要です。だから、例えば

tsMloa <- ts(read.dta("http://www.stata-press.com/data/r12/mloa.dta"), frequency=12, start=1959)
tsMloa[, "meanLog"] <- tsMloa[,"log"] - mean(tsMloa[,"log"])

エラーが発生しsubscript out of boundsます。どうすればこれを回避できますか?

4

1 に答える 1

2

require(foreign)まず、コードを実行する必要があるため、サンプルコードに追加することを検討する必要があります。

*.dtaファイルやそのフォーマットについては何も知りませんが、で時系列を操作したい場合は、関数のファミリーRを調べるとよいでしょうzooxts

それを念頭に置いて、次のことを試してください。

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としてとの両方で機能します。xtsorder.by

起点の日付を変更する必要がある場合は、関数に2番目の引数を指定するだけotherDateString <- intToMonth(timeInts, "2011-01-01")です。

于 2012-11-26T09:04:05.263 に答える