jnobuyukiのブログ

JavaScriptとR言語を中心に研究活動に役立つwebアプリケーション技術について考えていきます。twitter ID: @j_nobuyuki

R言語でデータを分割してから,それぞれに同じ操作を繰り返す

今回はR言語の使い方のヒントを皆様と共有します。

データの分割はsplit関数

データを分割するには,split関数が便利です。split関数では2つの引数をとり,1つ目がデータオブジェクト,2つ目が分割するための基準となる変数を設定します。
以下の例を見てください。

sampleData <- data.frame(ID = c(1,1,1,2,2,2,3,3,3), performance = c(2,3,4, 3,4,5,4,5,6))

splitData <- split(sampleData, sampleData$ID)

このとき,splitDataの内容を見ると,分割されたデータのそれぞれがリスト内に保存されていることがわかります。

splitした後のデータへの操作

リストの中身を見るときには通常の でインデックスをつかうのではなく,[]二重にカッコを使ってインデックスで指定します。
例えば分割したデータの最初の部分(IDが1の場合)だけを見るなら以下のようにします。

splitData[[1]]

for関数の引数のインデックスをこのリスト内の要素呼び出しに使えば,分割されたデータのそれぞれに,同じ操作を繰り返し使えます。例として,IDごとの平均値を計算して,偏差の変数を作ってみます。

for (i in 1: length(splitData)){
    #平均を計算
    averagePerformance <- mean(splitData[[i]]$performance)
    splitData[[i]]$deviation <- splitData[[i]]$performance - averagePerformance 
}

このようにすると,IDごとに異なる平均値で偏差が計算できます。

分割したデータをもとに戻す

分割したデータに操作を加えたら,最後はもとのデータに戻しましょう。このときunsplit関数を用います。
分割の基準の変数をそのままもう一度使うのがコツです。

unsplitData <- unsplit(splitData, sampleData$ID)

このようにすると,subset関数で部分データを作らなくても,分割データに対して次々に操作を加えられます。