価格とボリュームを含むxtsオブジェクトがあります。データを期間ごとに分割し、データを集計して、各期間の分割について、各価格で取引されたボリュームのテーブルを取得したいと思います。
私は部分的な解決策を一緒にハックしましたが、それは不格好で遅いです。さらに、テンプレート名を使用して機能させることができません(したがって、関数を機能させることができません)。
xtsオブジェクトのサブセットを以下に示します。
library(xts)
mn <-
structure(c(97.9, 97.9, 97.9, 97.9, 97.9, 97.9, 97.9, 97.89,
97.89, 97.89, 97.89, 97.89, 97.89, 97.9, 97.9, 97.89, 97.9, 97.89,
97.89, 97.89, 97.89, 9, 60, 71, 5, 3, 21, 5, 192, 65, 73, 1,
1, 39, 15, 1, 1, 18, 1, 33, 1, 1), .Dim = c(21L, 2L), .Dimnames = list(
NULL, c("px_ym1", "vol_ym1")), index = structure(c(1338561000,
1338561000, 1338561000, 1338561000, 1338561000, 1338561000, 1338561060,
1338561060, 1338561060, 1338561060, 1338561060, 1338561060, 1338561060,
1338561060, 1338561060, 1338561060, 1338561060, 1338561060, 1338561120,
1338561240, 1338561240), tzone = "", tclass = c("POSIXct", "POSIXt"
)), .indexCLASS = c("POSIXct", "POSIXt"), tclass = c("POSIXct",
"POSIXt"), .indexTZ = "", tzone = "", class = c("xts", "zoo"))
次のコマンドを使用して集計する方法を理解しました。
PxMat <- aggregate(.~px_ym1, data=mn, sum)
px_ym1 vol_ym1
1 97.89 408
2 97.90 208
サブセットの場合、次のグループ化を使用します。
PxMat2 <- aggregate(.~px_ym1, data=mn[.indexmin(mn) == '30'], sum)
px_ym1 vol_ym1
1 97.9 169
私は4つの特定の質問があります:
1 /私のデータセットは巨大なので、速度が問題になります。これは、xtsをサブセット化して集約するための最速の方法ですか?
2 /複数の分割に対してこれを行う方法はありますか?分、日、週、または月ごとにテーブルを言いますか?
私は、指定された時分割の各ケースの各価格で取引されたボリュームを報告するテーブルを生成するループを備えた関数を書いています(たとえば、4つのテーブル、例のデータでは1分ごとに1つ)。それは遅いようで、誰かがすでにもっとうまくやっていたであろう何かのようです。これは本当ですか?
3 /テンプレート変数を使用してサブセット化を行う方法はありますか?列名は時々異なるため、複数のデータフレームを持つ名前付き集計関数(上記で再現)で取得したテーブルを取得したいと思います。
私が試してみました:
PxMat <- aggregate(.~mn[,1], data=mn, sum)
px_ym1 px_ym1 vol_ym1
1 97.90 1076.79 408
2 97.89 979.00 208
これは大惨事ではありませんが、複数の列がある場合は、混乱を最小限に抑えたいと思います。価格系列の集計を抑制する方法がわかりません。
4 /関連する注記で、データの異なる列に異なる関数を適用することは可能ですか?たとえば、返されたテーブルが次のようになっていると便利です。
px_ym1 count vol_ym1
1 97.90 11 408
2 97.89 10 208
R-helpへのクロスポスト:https ://stat.ethz.ch/pipermail/r-help/2012-June/315499.html