今回は、R上のデータを計算する方法のうち、apply系と呼ばれる表計算が出来るものを紹介します。
apply系の種類
apply | 行列・データフレームに対し、各行、各列で演算 |
tapply | データフレームの指定した値でグループ化して演算 |
lapply | リストに対して演算。結果もリスト |
sapply | リストに対して演算。結果がベクトル |
mapply | 複数リストまたはベクトルに対して関数を適用 |
例を見ていきましょう。xdataは以前に作ったデータです。
a<-apply(xdata,1,mean) # 引数の2番目に1とすると行に対して演算
> head(a) # head()は先頭の6個のデータを呼び出せる。データが大きい時に便利。(,x)で数値指定すれば表示数を変更可能
2023-07-24 06:03:00 2023-07-24 06:05:00 2023-07-24 06:06:00 2023-07-24 06:09:00
141.7675 141.6825 141.6868 141.6965
2023-07-24 06:10:00 2023-07-24 06:11:00
141.6975 141.6962
b <- apply(xdata,2,var) # 2を設定すると列に対して演算 この場合分散を求めている。
> b
open high low close
2.510861 2.497637 2.524620 2.511231
c <- c(1,2,3,4,5,2,3,4,5,6,7,8,9,1,2) # 長さ15の数値
d <- rep(c("a","b","c"),5) # 長さ15にするために、rep()でa,b,cの3つのグループを5回繰り返す
tapply(c, d, mean) # cの並びをdグループに分けて、それぞれの平均を求める。
a b c
4.6 3.8 4.0
# 今回はベクトル同士でやっていますが、データフレームなどでも長さが一緒であれば抜き出してまとめられます
a <- c(1,2,3)
b <- c(2,3,4)
c <- c(3,4,5)
tlist <- list(a,b,c) # リストを作りました
> lapply(tlist,mean) # リストの平均値を求めて リストで結果が戻る
[[1]]
[1] 2
[[2]]
[1] 3
[[3]]
[1] 4
> sapply(tlist,mean) # リストの平均値を求めて ベクトルで結果が戻る
[1] 2 3 4
#mapply用に関数を作る
# function(引数,・・・){計算内容}で自作関数を作ることが出来る
my_func <- function(x,y){ # 自作関数の引数の書き方を決定
+ z <- x-y #引数を用いた計算内容を定義
+ return(z) # 計算結果を表示
+ }
> my_func(1,2) # 今回はmy_func(x,y)という関数に、引数2つで差を取る関数を作った
[1] -1
result <- mapply(my_func,xdata$high,xdata$low) # 自作関数をxdataのhighとlowを引数として適用
> head(result,10) # 10個目までのデータを確認
high <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
0.165 0.005 0.020 0.021 0.023 0.005 0.005 0.002 0.053 0.014
> head(xdata$high-xdata$low,10) # 直接計算させたものを見てみる
high
2023-07-24 06:03:00 0.165
2023-07-24 06:05:00 0.005
2023-07-24 06:06:00 0.020
2023-07-24 06:09:00 0.021
2023-07-24 06:10:00 0.023
2023-07-24 06:11:00 0.005
2023-07-24 06:12:00 0.005
2023-07-24 06:13:00 0.002
2023-07-24 06:14:00 0.053
2023-07-24 06:15:00 0.014 # 計算結果は一致!
result <- mapply(my_func,xdata[,2],xdata[,3]) # こういう書き方でもOK!
> head(result,10)
high <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
0.165 0.005 0.020 0.021 0.023 0.005 0.005 0.002 0.053 0.014
色々な計算が出来ます。平均(mean)、合計(sum)、分散(var)、最大値(max)、最小値(min)、標準偏差(sd)、要約(summary)、テーブル(table)等です。
基本的にはfor文で行や列ごとに計算~ってするより早いと言われています。 後は単純にfor文よりコードが短くなります。
今回はこの辺で
おすすめFXアイテム
過去検証や分析はMT4かFT4、Trading viewがおすすめです。
無料が良い人はMT4で、MT4を使わせてくれる口座を使用すると良いです。おすすめはFXTF
チャート分析に毎月課金してもいいよって人はTrading viewがおすすめです。無料もあります