2017-04-25 13 views
0

比較的簡単な質問ですが、私は例を見つけることができません。等々R - 時系列で次に高い値

Datetime, Price 
2016-09-01 00:00:01, 1.11563 
2016-09-01 00:00:01, 1.11564 
2016-09-01 00:00:02, 1.11564 
2016-09-01 00:00:03, 1.11565 

...と:

は、私はシンプルな外国為替価格の2列XTSオブジェクトと呼ばsubx1にあるデータを持っています。

価格はdaypeakxtsのサンプルである場合daypeakxts $ before2.Highと呼ばれる別のオブジェクトのコラムで開催され、

れる前14:00高よりも高くなったとき、私は午後2時後の最初の時間を見つけようとしている

Date, before2.High 
2016-09-01, 1.11567  
2016-09-02, 1.11987 

これは私が何をしようとしているの悪い例です。

subxresult <- index(subx1, subx1$datetime > daypeakxts$before2.High) 

を...ので、私は条件付きSTAを使用した価格で日時を発見するために探していますもう1つのxtsオブジェクトの1日の価値を持つテンション。

+1

「which.max(time> 2PM&value> previousValue)」のようなものを適切な変換で試してみてください。 – lmo

+0

ありがとうございます。私は、通常のdata.frameに変換しなければならなかったし、次に試してみました: subxresult < - which.max(subx1 $ DT == daypeakxts $日付&SUBX $価格> daypeakxts $ before2.High) が、エラーを受信しました: "長いオブジェクトの長さは、短いオブジェクトの長さの倍数ではありません" 私は1つのインスタンス(その日の最高2pm前の価格)ではなく、主要な時系列の日時を使用しています。どちらもPOSIX形式です。 – nycrefugee

答えて

2

reproducible exampleには十分なデータが提供されていないため、xtsパッケージに含まれている日々のデータを使用します。

library(xts) 
data(sample_matrix) 
x <- as.xts(sample_matrix, dateForamt = "Date") 

# Aggregate and find the high for each week 
Week.High <- apply.weekly(x, function(x) max(x$High)) 

# Finding the pre-2pm high would be something like: 
# Pre.2pm.High <- apply.daily(x["T00:00/T14:00"], function(x) max(x$High)) 

# Merge the period high with the original data, and 
# fill NA with the last observation carried forward 
y <- merge(x, Week.High, fill = na.locf) 

# Lag the period high, so it aligns with the following period 
y$Week.High <- lag(y$Week.High) 

# Find the first instance where the next period's high 
# is higher than the previous period's high 
y$First.Higher <- apply.weekly(y, function(x) which(x$High > x$Week.High)[1]) 
+0

私はあなたのソリューションを試しました。それはあなたのために働きました - そして、かなり適応しました。 – nycrefugee

関連する問題