今回は、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

ガチで過去検証をやりたい人はFT4、

チャート分析に毎月課金してもいいよって人はTrading viewがおすすめです。無料もあります

Twitterでフォローしよう

おすすめの記事