既に小数点以下2桁に丸められた株価のデータセットがあります(1234.56)
。私は現在、株ごとに異なる特定の値に丸めようとしています。ここではいくつかの例を示します。
Current Stock Price Minimum Tick Increment Desired Output
123.45 .50 123.50
155.03 .10 155.00
138.24 .50 138.00
129.94 .10 129.90
... ... ...
私はこれをどのように行うか本当にわかりませんが、提案を受け入れます。
多分、
round(a/b)*b
仕事をします。
> a <- seq(.1,1,.13)
> b <- c(.1,.1,.1,.2,.3,.3,.7)
> data.frame(a, b, out = round(a/b)*b)
a b out
1 0.10 0.1 0.1
2 0.23 0.1 0.2
3 0.36 0.1 0.4
4 0.49 0.2 0.4
5 0.62 0.3 0.6
6 0.75 0.3 0.6
7 0.88 0.7 0.7
私はRの言語に精通していませんが、私のメソッドは天井関数を持つ任意の言語で動作するはずです。私はそれが最も近い0.5に切り上げられていると仮定します:
a = ceiling(a*2) / 2
if a = 0.4, a = ceiling(0.4*2)/2 = ceiling(0.8)/2 = 1/2 = 0.5
if a = 0.9, a = ceiling(0.9*2)/2 = ceiling(1.8)/2 = 2/2 = 1
TaRifxパッケージにはそのような機能があります。
> library(taRifx)
> roundnear( seq(.1,1,.13), c(.1,.1,.1,.2,.3,.3,.7) )
[1] 0.1 0.2 0.3 0.4 0.6 0.6 0.7
あなたの場合、株価と最小目盛りの増分を最初と2番目の引数として渡すだけで、魔法のように動作するはずです。
N.B。これは現在廃止されています。コメントを参照してください。
JoshO'Brienがコメントで言ったように:round_any
パッケージのplyr
は非常にうまく機能します!
> library(plyr)
> stocks <- c(123.45, 155.03, 138.24, 129.94)
> round_any(stocks,0.1)
[1] 123.4 155.0 138.2 129.9
>
> round_any(stocks,0.5)
[1] 123.5 155.0 138.0 130.0
>
> round_any(stocks,0.1,f = ceiling)
[1] 123.5 155.1 138.3 130.0
>
> round_any(stocks,0.5,f = floor)
[1] 123.0 155.0 138.0 129.5
詳細はこちら: https://www.rdocumentation.org/packages/plyr/versions/1.8.4/topics/round_any