12

私はここで少し戸惑っていて、かなり基本的なものが欠けているに違いありません。複数の時系列オブジェクトから列を抽出したい。tsオブジェクトをデータフレームにしてから抽出することで実行できる可能性がありますが、この質問リンクに示されているように、時系列をサブセット化する直接的な方法があります。

tsオブジェクトに名前を割り当てる方法を理解するために、?tsは

ts(data = NA, start = 1, end = numeric(), frequency = 1,
   deltat = 1, ts.eps = getOption("ts.eps"), class = , names = )

ただし、fits helpでコードを実行すると、namesパラメーターの有無にかかわらず names(z)NULLが返されます。

z <- ts(matrix(rnorm(300), 100, 3), start=c(1961, 1), frequency=12) またz <- ts(matrix(rnorm(300), 100, 3), start=c(1961, 1), frequency=12, names=c("x1", "x2", "x3"))

主な質問:1。時系列オブジェクトtsおよびmtsの列に名前を割り当てるにはどうすればよいですか?2.時系列オブジェクトから時系列オブジェクトから直接列を抽出する方法は何ですか?zooまたはxtsクラスに変換する必要がありますか?または、時間インデックスを個別に追加しますか?

私が解決しようとしている問題のアイデアを与えるために:

# using inbuilt ldeaths time series dataset
ldeaths
d <- diff(ldeaths)
percen <- quantile(d, 0.9)
i <- ifelse(d>percen, 1,0)
signal <- cbind(d,i) 

ここで、インジケーターが1であるデータセットを、時間インデックスを使用して抽出するために、どのように進めるかがわかりません。str(signal)はmtsオブジェクトですが、信号を出力すると時間インデックスが表示されません。

どうもありがとう。

4

2 に答える 2

14

"mts"オブジェクト内のシリーズの名前を抽出する

あなたが欲しいcolnames()

> colnames(z)
[1] "x1" "x2" "x3"

これは、z実際には追加の属性を持つ行列であり、行列には​​ないがnames、あるためですcolnames

"mts"オブジェクト内のシリーズの名前の割り当て/変更

事後に割り当てるcolnames、または変更するには、置換機能を使用します'colnames<-'

> colnames(z) <- paste0("a", 1:3)
> colnames(z)
[1] "a1" "a2" "a3"

"mts"オブジェクトから特定のシリーズを抽出する

列の抽出に関しては、オブジェクト[に対しては問題なく機能します。例えば:"ts""mts"

> z[,1]
             Jan         Feb         Mar         Apr         May
1961  0.81800833 -0.30852155  0.05915071  0.14937058  0.67734362
1962  1.12993606 -0.81176485 -0.51903387  1.12527537 -0.34377553
1963  1.30469813  0.32486340  0.01029512 -1.13631688 -1.22013150
1964  0.72449621 -0.88704234  0.78834391 -0.92956537 -0.31584252
1965  0.24610412  0.97980266  0.17136276  2.45216318  0.15846038
1966 -0.48891587 -0.62820331  0.33190472  2.14094813  1.32389152
1967  0.49120472 -0.10149521 -0.39070688 -0.78743955 -1.20563040
1968 -0.70749150  0.52333087 -0.51991721  0.02037504 -0.59848254
1969 -0.80156968 -1.38172513  0.09400527  0.66966443            
....

OPの問題の根性

最後に、あなたが何を手に入れたいのかわかりません。"ts"またはオブジェクトは通常の"mts"時系列であり、結果のビットをsignal[, "d"]時系列ではなくベクトルで抽出します。

> signal[signal[,2] == 1, 1]
[1]  761 1104  810  653  522  956  593

これはオブジェクトではなくなったため、時間インデックスはありません"ts"あなたがこれをしたいのなら、動物園パッケージはおそらくあなたが行きたい方法です。これは、を使用してzooオブジェクトに変換する例です。as.zoo()

require(zoo)
sz <- as.zoo(signal)

次に、必要な観測値を抽出できます(時間インデックスの有用な指標となる名前)

> sz[sz[, "i"] == 1, "d"]
1975(12)  1976(2) 1976(12) 1977(12)  1978(1) 1978(12)  1979(1) 
     761     1104      810      653      522      956      593 

次に、同様のサブセット化呼び出しを使用しますが、を使用してindex()動物園オブジェクト全体の時間インデックスを返し、必要なビットを選択します

> index(sz)[sz[, "i"] == 1]
[1] 1975.917 1976.083 1976.917 1977.917 1978.000 1978.917
[7] 1979.000
于 2012-11-07T22:00:04.580 に答える
1

mts(行列時系列)オブジェクトの列の名前を変更する場合。関数を使用するだけcolnames()です。

例:3つの列を含む時系列データがあり、その列名を変更したい場合:

colnames(data) <- c('newname1','newname2','newname3')

お役に立てれば。

于 2017-09-16T07:11:56.617 に答える