以下の入門記事は、Rの新規ユーザーを対象としています。データの再構築:rの基本関数と{reshape}パッケージを使用したデータの再構築:データの再構築とは何か、それをどのように実行するかについて説明しています。
これは、最初のオンラインRチュートリアルwebサイトQuick-Rの創設者であるRobert I.Kabacoff博士によるゲスト記事です。 Kabacoffは最近、”R in Action”という本を出版し、Rの機能(データ操作、統計的方法、グラフィックスなど)を説明するためのさまざまな例に基づいて、R言語の詳細なウォークスルーを提供している。 Kabacoffによる以前のゲスト投稿では、データが紹介されました。このブログの読者のために、チェックアウトに達するときにコードrblogg38を使用するだけで、”R in Action”本(およびManning publishing houseの他のすべての電子ブック、pbook、MEAPs)が38%割引されます。
ここで、Rにおけるデータの集約と再構築について話しましょう:
集約と再構築
Rは、データの集約と再形成のための多くの強力な方法を提供します。 データを集計するときは、観測値のグループを、それらの観測値に基づいた要約統計に置き換えます。 データの形状を変更するときは、データの編成方法を決定する構造(行と列)を変更します。 この記事では、これらのタスクを実行するためのさまざまな方法について説明します。このデータセットは、Motor Trend magazine(1974)から抽出されたもので、34台の自動車の設計と性能特性(気筒数、排気量、馬力、mpgなど)を記述しています。 データセットの詳細については、ヘルプ(mtcars)を参照してください。
転置
転置(行と列を反転)は、おそらくデータセットを再形成する最も簡単な方法です。 行列またはデータフレームを転置するには、t()関数を使用します。 後者の場合、行名は変数(列)名になります。 次のリストに例を示します。
リスト1データセットを転置する
リスト1は、ページ上のスペースを節約するためにmtcarsデータセットのサブセットを使用します。 この記事の後半でreshapeパッケージを見ると、データをより柔軟に移調する方法がわかります。
データの集約
変数と定義された関数によって1つ以上を使用してRのデータを折りたたむのは比較的簡単です。 形式は次のとおりです
1 |
aggregate(x, by, FUN) |
ここで、xは折りたたまれるデータオブジェクト、byは新しい観測値を形成するために交差する変数のリスト、FUNは新しい観測値を構成する要約統計量を計算するために使用されるスカラー関数です。
例として、mtcarsデータをシリンダーとギアの数で集計し、各数値変数の平均を返します(次のリストを参照)。
リスト2データを集計する
これらの結果では、グループ化します。1はシリンダーの数(4、6、またはおよびグループを表します。2は歯車の数(3、4、または5)を表します。 たとえば、4気筒と3つのギアを持つ車は、ガロンあたり21.5マイル(mpg)の平均を持っています。Aggregate()関数を使用している場合、by変数はリストに含まれている必要があります(1つしかない場合でも)。 たとえば、by=list(Groupを使用して、リスト内からグループのカスタム名を宣言できます。cyl=cyl、グループ。ギア=ギア)。
指定される関数は、組み込み関数またはユーザー提供の関数にすることができます。 これにより、aggregateコマンドに多大なパワーが与えられます。 しかし、電源に関しては、reshapeパッケージに勝るものはありません。
reshapeパッケージ
reshapeパッケージは、データセットの再構築と集約の両方に非常に汎用性の高いアプローチです。 この多様性のために、学ぶことは少し挑戦的である場合もある。
何が起こっているのかを明確にするために、プロセスをゆっくりと進め、小さなデータセットを使用します。 ReshapeはRの標準インストールには含まれていないため、installを使用して1回インストールする必要があります。パッケージ(”reshape”)。基本的には、各行が一意のID変数の組み合わせになるようにデータを「溶融」します。 次に、溶融したデータを希望する任意の形状に”キャスト”します。 キャスト中に、任意の関数を使用してデータを集計することができます。 作業するデータセットを表1に示します。
表1元のデータセット(mydata)
ID |
時間 |
X1 |
X2 |
1 | 1 | 5 | 6 |
1 | 2 | 3 | 5 |
2 | 1 | 6 | 1 |
2 | 2 | 2 | 4 |
このデータセットでは、測定値は最後の二つの値です コラム(5, 6, 3, 5, 6, 1, 2, および4)。 各測定値は、ID変数(この場合、ID、時間、および測定値がX1またはX2のいずれであるか)の組み合わせによって一意に識別されます。 たとえば、最初の行の測定値5は、それが観測値(ID)1、時刻1、および変数X1からのものであることを知ることによって一意に識別されます。
溶融
データセットを溶融するときは、測定された各変数が一意に識別するために必要なID変数とともに、独自の行にある形式に再構築します。 次のコードを使用して、表1のデータを溶融する場合
12 |
library(reshape)md <- melt(mydata, id=(c("id", "time"))) |
表2に示す構造になります。
表2溶融したデータセット
ID |
時間 |
変数 |
値 |
1 | 1 | X1 | 5 |
1 | 2 | X1 | 3 |
2 | 1 | X1 | 6 |
2 | 2 | X1 | 2 |
1 | 1 | X2 | 6 |
1 | 2 | X2 | 5 |
2 | 1 | X2 | 1 |
2 | 2 | X2 | 4 |
各測定値(IDとTime)を一意に識別するために必要な変数を指定する必要があり、測定変数名(X1またはX2)を示す変数が自動的に作成されることに注
データを溶融した形にしたので、cast()関数を使用して任意の形に再キャストできます。
キャスト
cast()関数は、溶融されたデータから始まり、指定した数式とデータの集計に使用される(オプション)関数を使用して形状を変更します。 形式は次のとおりです
1 |
newdata <- cast(md, formula, FUN) |
ここで、mdは溶融されたデータ、formulaは所望の最終結果を記述し、FUNは(オプションの)集計関数である。 式は次の形式をとります
1 |
rowvar1 + rowvar2 + … ~ colvar1 + colvar2 + … |
この式では、rowvar1+rowvar2+…は行を定義する交差変数のセットを定義し、colvar1+colvar2+…は列を定義する交差変数のセットを定義します。 図1の例を参照してください。 (画像をクリックすると拡大します)
図1melt()関数とcast()関数を使用したデータの再整形
右側の数式(d、e、f)には関数が含まれていないため、データは再整形されます。 対照的に、左側の例(a、b、およびc)では、平均を集計関数として指定しています。 したがって、データは再形成されるだけでなく、集計されます。 たとえば、(a)は、各観測値について時間の経過とともに平均化されたX1およびX2の平均を与えます。 例(b)は、観測値全体で平均化された、時刻1および時刻2におけるX1およびX2の平均スコアを示します。 (C)では、時間1と時間2の各観測値の平均スコアがあり、X1とX2で平均化されています。ご覧のとおり、melt()関数とcast()関数によって提供される柔軟性は素晴らしいです。 分析の前にデータの形状を変更または集計する必要がある場合が多くあります。 たとえば、反復測定データ(観測ごとに複数の測定値が記録されているデータ)を分析するときは、通常、表2に似た長い形式でデータを配置する必要があります。
要約
R in Actionの第5章では、データの操作に役立つ数十の数学関数、統計関数、確率関数の多くがレビューされています。 この記事では、データの集約と再構築のいくつかの方法を簡単に検討しました。
この記事は、”R in action”の本から第5.6章として初めて登場し、Manning publishing houseの許可を得て出版されています。 あなたが興味を持っているかもしれないこの深刻な他の本は(割引コードについては、この記事の冒頭を参照してください):
- Peter Harringtonによる機械学習の実践
- Gnuplot In Action(グラフでデータを理解する)By Philipp K.Janert