「データフレーム,Excelとの連携」の編集履歴(バックアップ)一覧はこちら
「データフレーム,Excelとの連携」(2008/08/11 (月) 22:48:16) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
データをテキストで直打ちしてベクトルにするのも慣れればなんてことはないですが,それでもデータの入力・管理はExcelやCalcのような表計算ソフトのほうがやりやすいと思います.ここでは,データをExcelやCalcからRへ引っ張ってくる方法を説明します.
*データフレームの作成
Rで作成することのできるデータの構造には、ベクトルのほか[[行列]]、[[配列]]、これらを組み合わせた[[リスト]]などがありますが、まずはExcel形式と親和性の高いデータフレームについて説明します。データフレームはRの標準的なデータ構造ですから、ベクトルとデータフレームさえ知っていればかなり色々なことができるようになります。
データフレームは同じ長さのベクトルを複数個集めたものだと考えるとわかり易いと思います。データフレームはdata.frame()関数により作成します。引数としては同じ長さのベクトルを与えます。
> name <- c("a", "b", "c", "d", "e", "f")
> point <- c(1.0, 1.5, 2.0, 1.1, 1.3, 0.7)
> rate <- c("C", "A", "A", "B", "B", "B")
> data.frame(name, point, rate)
name point rate
1 a 1.0 C
2 b 1.5 A
3 c 2.0 A
4 d 1.1 B
5 e 1.3 B
6 f 0.7 B
ここでは、長さ6のベクトル3つをまとめてデータフレームを作りました。上の例のではベクトルは最初にオブジェクトに格納しましたが、必ずしもこの手順に従う必要はありません。次のように直接data.frame()関数の中で指定することも可能です。
> data.frame(
+ name = c("a", "b", "c", "d", "e", "f"),
+ point= c(1.0, 1.5, 2.0, 1.1, 1.3, 0.7),
+ rate = c("C", "A", "A", "B", "B", "B")
+ )
name point rate
1 a 1.0 C
2 b 1.5 A
3 c 2.0 A
4 d 1.1 B
5 e 1.3 B
6 f 0.7 B
ここでは「name=...」などとしてベクトルの名前を指定しましたが、指定しなかった場合は入力した命令に応じて自動で名前がつきます。ただしデータの参照の際などに困ることがありますから、名前を指定する、もしくはあらかじめオブジェクトにしたベクトルを利用してデータフレームを作成するようにしましょう。
> data.frame(1:3,2:4,3:5)
X1.3 X2.4 X3.5
1 1 2 3
2 2 3 4
3 3 4 5
----
*エクセルからデータを持ってくる
データフレームのデータの並び方は表計算ソフトっぽいです。データ入力は表計算で行って、そいつをパパっとRに持ってきて統計処理やらなにやらができたら便利ですね。Rにはそういった要望にこたえるためのread.○○○()という一連の関数があります。クリップボード(Windowsとかでコピーのコマンド[Ctrl+Cとか]を実行したときに、データが一時的に収納される場所)へコピーしたExcel、またはオープンオフィスのCalcのデータをRへ移すには、read.delim()関数を使います。例えば、Excel上で次のような形のデータがあったとしましょう。
|動物|頭数|サイズ|
|ネコ|100|small|
|シカ|10|middle|
|シロナガスクジラ|1|ultimate|
データをテキストで直打ちしてベクトルにするのも慣れればなんてことはないですが,それでもデータの入力・管理はExcelやCalcのような表計算ソフトのほうがやりやすいと思います.ここでは,データをExcelやCalcからRへ引っ張ってくる方法を説明します.
*データフレームの作成
Rで作成することのできるデータの構造には、ベクトルのほか[[行列]]、[[配列]]、これらを組み合わせた[[リスト]]などがありますが、まずはExcel形式と親和性の高いデータフレームについて説明します。データフレームはRの標準的なデータ構造ですから、ベクトルとデータフレームさえ知っていればかなり色々なことができるようになります。
データフレームは同じ長さのベクトルを複数個集めたものだと考えるとわかり易いと思います。データフレームはdata.frame()関数により作成します。引数としては同じ長さのベクトルを与えます。
> name <- c("a", "b", "c", "d", "e", "f")
> point <- c(1.0, 1.5, 2.0, 1.1, 1.3, 0.7)
> rate <- c("C", "A", "A", "B", "B", "B")
> data.frame(name, point, rate)
name point rate
1 a 1.0 C
2 b 1.5 A
3 c 2.0 A
4 d 1.1 B
5 e 1.3 B
6 f 0.7 B
ここでは、長さ6のベクトル3つをまとめてデータフレームを作りました。上の例のではベクトルは最初にオブジェクトに格納しましたが、必ずしもこの手順に従う必要はありません。次のように直接data.frame()関数の中で指定することも可能です。
> data.frame(
+ name = c("a", "b", "c", "d", "e", "f"),
+ point= c(1.0, 1.5, 2.0, 1.1, 1.3, 0.7),
+ rate = c("C", "A", "A", "B", "B", "B")
+ )
name point rate
1 a 1.0 C
2 b 1.5 A
3 c 2.0 A
4 d 1.1 B
5 e 1.3 B
6 f 0.7 B
ここでは「name=...」などとしてベクトルの名前を指定しましたが、指定しなかった場合は入力した命令に応じて自動で名前がつきます。ただしデータの参照の際などに困ることがありますから、名前を指定する、もしくはあらかじめオブジェクトにしたベクトルを利用してデータフレームを作成するようにしましょう。
> data.frame(1:3,2:4,3:5)
X1.3 X2.4 X3.5
1 1 2 3
2 2 3 4
3 3 4 5
**代入と呼び出し
実際にはベクトルと同じで何かオブジェクトに代入しておいてから使うのが賢いやり方です。
> my.data <- data.frame(name, point, rate)
こうしておけば、オブジェクト「my.data」の中にはがんばって作ったデータフレームを保存しておくことができます。使うときは、ベクトルと同じで名前を呼んでやります。
> my.data
name point rate
1 a 1.0 C
2 b 1.5 A
3 c 2.0 A
4 d 1.1 B
5 e 1.3 B
6 f 0.7 B
また、最初に「データフレームは同じ長さのベクトルを複数個集めたものだ」といいました。ですから、データフレームを構成しているベクトルを一部だけ引っ張ってくることもできます。それには、名前に続いて$マークをタイピングし、それに続けてベクトルの名前を打ち込んでやります。「データフレーム名$ベクトル名」といった具合です。実際にやってみましょう。
> my.data$rate
[1] C A A B B B
Levels: A B C
呼び出せました。なにやらLevelsというものが付いていますが、これはこのベクトルが「因子」ベクトルとして認識されていることを表しています。因子ベクトルはベクトルの要素の文字や数字によってグループ分けがなされます。ここではA B Cという3つのグループが認識されていることになります。このグループ分けはグラフを要素ごとに分けて書いたり、多重比較のような統計処理をしたりするときに重要となりますから頭の片隅にでも置いておいてください。必要な箇所では改めて説明します。
----
*エクセルからデータを持ってくる
データフレームのデータの並び方は表計算ソフトっぽいです。データ入力は表計算で行って、そいつをパパっとRに持ってきて統計処理やらなにやらができたら便利ですね。Rにはそういった要望にこたえるためのread.○○○()という一連の関数があります。クリップボード(Windowsとかでコピーのコマンド[Ctrl+Cとか]を実行したときに、データが一時的に収納される場所)へコピーしたExcel、またはオープンオフィスのCalcのデータをRへ移すには、read.delim()関数を使います。例えば、Excel上で次のような形のデータがあったとしましょう。
|動物|頭数|サイズ|
|ネコ|100|small|
|シカ|10|middle|
|シロナガスクジラ|1|ultimate|
そうしたらこのデータの範囲を選択してクリップボードにコピーします。[Ctrl+C]ですね。Macではコマンドキーとやらを使うと風のうわさに聞いたことがあります。ともかく、コピーができたらRのコンソールへ移動します。そこで「read.delim("clipboard")」とコマンドすればさきほどコピーしたデータを使って次のようにデータフレームを作ってくれます。
> read.delim("clipboard")
動物 頭数 サイズ
1 ネコ 100 small
2 シカ 10 middle
3 シロナガスクジラ 1 ultimate
read.delim()関数ではコピーした範囲の最初の行が勝手にベクトルの名前と認識されます。引数を設定することでこの認識をさせなくしたり、名前を自由に設定したりすることもできますが、さしあたってはExcelにデータを打ち込む時点で「最初の行を名前にする、データは縦に並べる」というルールを設けておくということにしましょう。
Rへのデータの取り込み方はこれだけではありません。例えば僕が以前ロガーを用いて採取していた温度と湿度のデータはテキストファイルにして10万行を超えるものもあり、そもそもExcelでの表示が無理でした。しかし、幸いロガーはデータをCSV形式で吐き出してくれていたので、Rのread.csv()関数によって読み込むことができました。
このように外部からのデータの取り込み方には色々あるわけですが、とりあえずここは[[Rへのデータの取り込み]]というページだけを作成しておいて説明はそっちにまわすことにします。
おそらくはこのクリップボードを介してのデータ取り込みが一番わかり易いでしょう。データの動きをイメージしやすいですし、ミスも少ないと思います。
----