今回は実データの扱いに入ります。RではテキストファイルやExcelファイル(多くの場合csv形式のファイル)を変数に読み込んで解析を行うことが多いです。この時、データはデータフレーム型という形式で読み込みが行われます。今回は、「どのようにしてファイルの中身を変数データフレーム型で読み込んでR上で操作するのか」について解説していきます。sample-data.csv←今回使う解析用のファイル(csv形式)です。皆さんも、是非ダウンロードしてR上で動かしてみましょう!こんな感じのデータになってます。まとめと復習用コピペプログラムデータの読み込み方とデータのアクセス(参照)方法データ読み込み方Rでcsv形式のファイルをデータフレーム型で読み込む時に使う関数として”read.csv()”というものが用意されています。データの読み込み自体は1行で済みます。read.csv("sample-data.csv",header=T,row.names=1)ここでのポイントは以下の3つ。1読み込みたいデータのファイル名を""で囲む。2headerは列名があるか無いかを指定。あるときはT(TURE)、ない時はF(FALSE)今回のデータは一行目に年齢や血圧などの列名が入っているデータを扱っているのでheader=Tで読み込みを行っています。デフォルトでheaderはTRUEであるので指定しなくても大丈夫ですが、ここでは一応指定してあります。3row.namesは行名の指定。row.names=1だと1列目が列名になる。今回のデータは1列目は番号が書いてあるのでrow.names=1を指定して、1列目を行名として扱っています。※注意ファイルの読み込みは、ファイルが存在しているディレクトリに移動する必要があります。移動は、setwd(ディレクトリへのパス)で可能です。例)setwd("/Users/username/Desktop")詳しくは→プログラムで作業ディレクトリを変更する方法ここでdfの中身はこのようになっているはずです。42行列と似ていますね。行列との違いはデータフレームでは全ての行と列が必ず列名行名(ラベル)を持っているということです。データフレームでは、この列名行名による操作が可能になっています。ここで使ったコマンド、関数を説明は重複しますが、一覧で載せておきます。csv形式のファイルを読み込む関数。"ファイル名が.csv"で終わっているものを読み込む。一行目を列名として読み込むか否か。header=TRUEで一行目は列名扱い。データ詠み込み時に行名を設定。row.names=aでa列名を行名として扱う。データのアクセス(参照)方法データフレームの特徴は、指定すれば任意の要素へアクセス出来ることです。データの1列目だけを見たり、1行目だけを見たり、列名が”年齢”の列だけを参照したり、、、という具合にです。すればできるのか実際にプログラムを見てみましょう。#「年齢」という名の列のデータこのようなプログラムで指定した列や行にアクセスできます。結果は次のようになっているはずです。65$を使えば指定の列名のデータにもアクセスできます。「参照したい部分が何列目かは数えないと分からないけど、列名はすぐ分かる」というような時に非常に便利に使えるコマンドなのでぜひ覚えておいてください。データ参照で頻繁に使うコマンド例です。次の項でさらに詳しく触れていきます。a列目のデータを参照。b行目のデータを参照。a列目とb列目のデータを参照データの取り出し方Rでは、データの任意の部分を参照するだけでなく、ほかの変数に代入することによって保存することもできます。大きなデータから必要なデータだけを取り出して保存したい時などに使えます。6つの例を見てみましょう。データをどのように取り出せたのでしょうか。ここでは新登場のコマンド"subset"というものを使います。例1:男性だけを取り出す男性だけを取り出す場合、男性は性別の列が”M”であるので、以下のようなプログラムで取り出せます。三種類ありますが、どれも同じ意味です。"M",]例2:体重が60kg未満の人を取り出す。体重が60kg未満の場合は体重の列を取り出し、それに対して<60で指定します。df[df[,6]<60,]例3:男性かつ体重が60kg未満の人を取り出す。例1と例2の両方を満たしていないといけないので、二つの条件を書いてを&(かつ)で結びます。df[,6]<60,]例4:肺活量4000以上の人を取り出す肺活量の列を取り出し、それに対して>=4000で4000以上の指定を行います。プログラムh<-subset(df,df$肺活量>=4000)例5:肺活量が3000以上、4000以下の人を取り出す。肺活量の列に対して、3000以上と4000以下の指定を行い&(かつ)で結びます。df$肺活量<=4000)例6:病気の列が1であり、体重が7kg以上の人を取り出す。病気の列に対して==1を指定し、体重の列に対して>=70を指定。二つを&(かつ)で結びます。df$体重>=70)それぞれ、どのようなデータになったかは、ここに載せるとあまりに長くなるので載せませんが、よかったら自分で確認してみてくださいね。今回使ったコマンドやテクニックを表で見ていきましょう。変数の条件に合うものを取り出す。subset(df,df$性別=="M")でdfという変数の性別の列が”M”であるものを取り出した。変数内の条件にあったものを取り出す。df[df$性=="M",]でdf内の行の条件で性別の列について”M”であるものだけを取り出す。列の条件は空白なので行の条件を満たす、全ての列を取り出している。a==bでaがbと等しいときTRUE(真)になる。それぞれ以下、以上の意味。条件を満たすときTRUEを返す。条件式B)で条件式Aと条件式Bを両方満たすとき、TRUE。ベクトルを扱う場合、c言語などと違い、&&(2つ)ではなく&(1つ)なので要注意。変数を扱う場合はC言語と同様に&&(2つ)を使用。まとめと復習用コピペプログラムいかがでしたでしょうか?今回はExcelデータをRで変数にデータフレーム型読み込んで、任意の部分を参照したりする方法を学びました。次回からいよいよ統計的手法を用いたデータ処理に入ります。解析に使いたい部分のデータだけを取り出したりするときに、今回学んだことを思い出して頂ければと思います。復習用に今回使ったプログラムを全て載せておきます。read.csv("sample-data.csv",header=T,row.names=1)#1読み込みたいデータ名を""で囲む#2headerは列名があるか無いか。あるときはT(TURE)、ない時はF(FALSE)#3row.namesは行名の指定。PMファイルを読み込むことができません。できればもう少し詳しい解説をお願い致します。PMコメントありがとうございます。このエラーは、現在のディレクトリにファイルが存在しない場合に表示されるものです。読み込みたいファイルがあるディレクトリへの移動は済んでいますか?ディレクトリの移動は、setwd(ディレクトリへのパス)で可能です。例)setwd(“/Users/username/Desktop”)ぜひお試しください。不正なマルチバイト文字がありますこれが出てきてしまいます。その原因がsetwd()これをやっていなかったことなのかと思ったのですが例ではsetwd(“/Users/username/Desktop”)となっていますが()のなかに何をいれればいいのかわかりません。つけないとエラーが発生することがあります。stewed()の()の中には、ファイルのあるフォルダへのパスを入れてください。例は、読み込みたいファイルがデスクトップにある場合です。パスというのは、宛先のようなものでファイルを選択してwindowsならプロパティ、macなら情報を見るで見ることができます。そこに表示されてるものをコピーアンドペーストでsetwd()の()内に入れるとうまくいくと思います。windowsの場合はただコピーアンドペーストするだけだと、/が逆向きになっているかもしれないので、そこを/に書き換えてください。fileEncoding=”CP932′′)以上のように書き換えることで私は読み込めました。解決していなければ試してみてください。PMご指摘ありがとうございます。PMいつもお世話になっております。先日からこちらのサイトでRの勉強を始めた者ですが、一つ表記通りにならない箇所がありましたので、ご教授願います。#「年齢」という名の列のデータ(1列目が年齢であれば)上記は同じ意味になると解釈したのですが、前者はリストを取得するのに対し、後者はデータを取得しました。(こちらのサイトでは、どちらもデータを取得すると読み取れました。)私が間違えているのであれば特に問題はないのですが、ご確認頂ければ幸いです。PMいつもお世話になっております。1])ですが、私の勘違いでした。具体的にはlistとdata.frameを勘違いしておりました。呼び出してみると、読み込めていないようです。PMコメントありがとうございます。ダブルクオーテーションが全角になってはいませんか?確認してみてください。コメントをキャンセルメールアドレスが公開されることはありません。