2

次のようなデータ フレーム オブジェクトを取得しました。

Date        dax_data.csv    nikkei_data.csv spx_data.csv
2013-03-15  NA              NA              1560.70
2013-03-14  NA              NA              1563.23
2013-03-13  NA              NA              1554.52
2013-03-12  NA              NA              1552.48
2013-03-11  NA              NA              1556.22
2013-03-08  8020.36         12283.62        1551.18

...

1984-01-04  4533.21         9927.00         900.42
1984-01-05  NA              9947.00         NA
1984-01-06  NA              9961.00         NA

次の手順を実行します。

  • すべてのデータセットに値がある日付範囲のみをカバーするようにデータ フレームを縮小します。この例では、1984-01-04to から2013-03-08(ハードコードすることはできず、動的にする必要があり、その間のすべての NA を保持する必要があります)。

  • データの頻度は毎週である必要があり、最初の値はデータフレーム内の最も古い値である必要があります。つまり、この例では1984-01-04

  • データ フレーム オブジェクトを timeSeries オブジェクトに変換する必要があります。

前もって感謝します!

4

2 に答える 2

3

データがどのように毎週の頻度に削減されるかを説明していません。つまり、あなたはその週から何か価値を取りますか?またはあなたは値の平均を取りますか?...

ここでは、パッケージを使用するオプションがありますxts。これは、特に金融時系列のこの操作に便利です。

library(xts)
dat.ts <- xts(dat[,-1],as.POSIXct(dat$Date))
dat.ts[endpoints(dat.ts,'weeks')]

           dax_data.csv nikkei_data.csv spx_data.csv
1984-01-06           NA            9961           NA
2013-03-11           NA              NA      1556.22
2013-03-15           NA              NA      1560.70
于 2013-03-16T11:29:58.643 に答える
1

を使用してデータを読み込み、 を使用read.zooして最初と最後にすべての NA 行をトリミングしますna.trimread.zoo(データフレームとファイルも「読み取る」ことができることに注意してください。)

次に、同じ値を持つすべての行を集計します(動物園のクイック リファレンス ビネットnextfriで定義されています)。 日付ベクトルを取り、各コンポーネントに対して次の金曜日 (またはすでに金曜日の場合は同じ日付) を返します。実際の集計関数は(各週の最後の行) ですが、 などの他の適切な集計関数に置き換えることもできます。( を参照)。 nextfritail1mean?aggregate.zoo

最後に、"zoo"時系列を時系列に変換し"timeSeries"ます。次に何をするつもりかによっては、この最後の手順が必要ない場合があります。

Lines <- "
Date        dax_data.csv    nikkei_data.csv spx_data.csv
2013-03-15  NA              NA              1560.70
2013-03-14  NA              NA              1563.23
2013-03-13  NA              NA              1554.52
2013-03-12  NA              NA              1552.48
2013-03-11  NA              NA              1556.22
2013-03-08  8020.36         12283.62        1551.18
1984-01-04  4533.21         9927.00         900.42
1984-01-05  NA              9947.00         NA
1984-01-06  NA              9961.00         NA
"

library(zoo)

z.raw <- read.zoo(text = Lines, header = TRUE)
z <- na.trim(z, is.na = "all")

nextfri <- function(x) 7 * ceiling(as.numeric(x-5+4) / 7) + as.Date(5-4)
tail1 <- function(x) tail(x, 1)
z.wk <- aggregate(z, nextfri, tail1)

library(timeSeries)
as.timeSeries(z.wk)
于 2013-03-16T12:43:13.917 に答える