私は、時系列データセットを持っています。関数を使用してデータフレームを更新して連続最良値を見つける
Time Price
15:30:01 NA
15:30:02 NA
15:30:03 36
15:30:04 38
15:30:05 37.5
15:30:06 NA
15:30:07 NA
15:30:08 37
15:30:09 37.8
15:30:10 39
15:30:11 40
15:30:12 38.5
15:30:13 38
15:30:14 38
私はこのような最高の価格を返す関数を書くことを探しています:
Time Price Best Price
15:30:01 NA 36
15:30:02 NA 36
15:30:03 36 36
15:30:04 38 38
15:30:05 37.5 38
15:30:06 NA 38
15:30:07 NA 38
15:30:08 37 38
15:30:09 37.8 38
15:30:10 39 39
15:30:11 40 40
15:30:12 38.5 40
15:30:13 38 40
15:30:14 38 40
私はna.omit(価格を経由して私のprice2を開始します
bbo <- function(price1, price2) {
currbestprice <- price2
newbestprice <- ifelse(price1 >= currbestprice, price1, currbestprice)
currbestprice <- newbestprice
return(currbestprice)
}
を試してみました)[1]を使用して最初の非NA値を取得します。私は、常に最も最近のベストプライスを保持するために継続的に更新されるcurrbestpriceを希望します。 Price1は単なる価格系列です。
しかし、私はこれをテストする場合:
p1 <- c(NA,NA,36,38,37.5,NA,NA,37,37.8,39,40,38.5,38,38)
p2 <- 36
bbo(p1,p2)
戻り
NA NA 36.0 38.0 37.5 NA NA 37.0 37.8 39.0 40.0 38.5 38.0 38.0
私のcurrbestpriceを更新していないようです。私は立ち往生して助けていただければ幸いです。
あなたは0でNAを置き換えることができますか? –
もちろん、それでも最高の価格を返すという大きな問題は解決しません。 NAを0に置き換えた場合、36.0 36.0 36.0 38.0 37.5 36.0 36.0 37.0 37.8 39.0 40.0 38.5 38.0 38.0の代わりに38 36 36 38 38 38 38 38 39 40 40 40 40 –
最初の2つの値は「NA」または0第3の価値まで「価格」がないからです。 「ave(1:nrow(df)、1:nrow(df)、FUN = function(x)max(df $ Price [1:x]、na.rm = TRUE)」のような何か? –