私の質問は、ここで尋ねられたものと密接に関連しています: R を使用して XTS オブジェクトから月の最初の営業日から Return を引き出します。
毎月 1 日を抽出する代わりに、抽出したいのは、各月の 10 番目のデータ ポイントです。これどうやってするの?
私の質問は、ここで尋ねられたものと密接に関連しています: R を使用して XTS オブジェクトから月の最初の営業日から Return を引き出します。
毎月 1 日を抽出する代わりに、抽出したいのは、各月の 10 番目のデータ ポイントです。これどうやってするの?
リンク先の質問と同じサンプル データを使用して、基本的なサブセット化を行うことができます。
サンプルデータは次のとおりです。
library(xts)
data(sample_matrix)
x <- as.xts(sample_matrix)
サブセットは次のとおりです。
x[format(index(x), "%d") == "10"]
# Open High Low Close
# 2007-01-10 49.91228 50.13053 49.91228 49.97246
# 2007-02-10 50.68923 50.72696 50.60707 50.69562
# 2007-03-10 49.79370 49.88984 49.70385 49.88698
# 2007-04-10 49.55704 49.78776 49.55704 49.76984
# 2007-05-10 48.83479 48.84549 48.38001 48.38001
# 2007-06-10 47.74899 47.74899 47.28685 47.28685
これはあなたが探していたものですか?
を使用%in%
すると、柔軟性が向上します。たとえば、各月の 10 日、11 日、12 日が必要な場合は、x[format(index(x), "%d") %in% c("10", "11", "12")]
代わりに使用できます。
更新のように、10 番目のデータ ポイントを抽出する場合は、次のように無名関数を使用します。
do.call(rbind, lapply(split(x, "months"), function(x) x[10]))
# Open High Low Close
# 2007-01-11 49.88529 50.23910 49.88529 50.23910
# 2007-02-10 50.68923 50.72696 50.60707 50.69562
# 2007-03-10 49.79370 49.88984 49.70385 49.88698
# 2007-04-10 49.55704 49.78776 49.55704 49.76984
# 2007-05-10 48.83479 48.84549 48.38001 48.38001
# 2007-06-10 47.74899 47.74899 47.28685 47.28685
データは実際には 2007 年 1 月 2 日から始まるため、最初の行はその月の11日であることに注意してください。
x[1, ]
# Open High Low Close
# 2007-01-02 50.03978 50.11778 49.95041 50.11778
xtsには、これらのタイプのサブセット用の組み込み関数がいくつかあります。
> data(sample_matrix)
> x <- as.xts(sample_matrix)
> x[.indexmday(x) == 10]
Open High Low Close
2007-01-10 49.91228 50.13053 49.91228 49.97246
2007-02-10 50.68923 50.72696 50.60707 50.69562
2007-03-10 49.79370 49.88984 49.70385 49.88698
2007-04-10 49.55704 49.78776 49.55704 49.76984
2007-05-10 48.83479 48.84549 48.38001 48.38001
2007-06-10 47.74899 47.74899 47.28685 47.28685
?indexClass
それらのすべてのリストについては、ヘルプ ページを参照してください。