RでExcelの特定の行だけ抜き出す方法 【R】

R
疑問
データ解析の仕事中です。
Excelの大きなデータがあるのだけど、特定の行(もしくは列)だけ抽出したいのですが、方法がわかりません。

このような疑問に答えていきます。

これを書いている僕は医療職で働きつつ大学院に通い5年目。Rを用いたデータ解析で学会発表や論文掲載までできています。

この記事を読むことでRを使ってExcelファイル等の特定の行だけ抽出する方法が簡単にわかります。

では始めていきましょう。

Rのseq関数を使いましょう(行・列が一定の間隔で繰り返される場合)

1つ目の方法ですが、Rのseq関数を使うと抽出したい行・列を便利に抜き出すことが可能です。但し、行・列が一定の間隔で並んでいることが条件になります(例えば3行おきに抜き出したい行があるなど)。

CSVファイル読み込み

実際にファイルを読み込んで試してみましょう。

例えば、以下のようなデータがあったとします。
東京、神奈川、千葉、埼玉(横行)の20個のお店(縦列)での仕入れた量に対する売れた量の割合データとします。日付が1/20~1/25まであります。

データはこちらからダウンロードできます

↑25行・22列のデータになっていますね。ではこのデータから全ての日にちの「埼玉」のデータを抜き出したい場合はどうすればよいのでしょうか?

手作業で切り取り、貼り付けの繰り返しも勿論可能ですが、データサイズが大きくなってくると厳しいですよね。

そこで今回はRのseq関数を用いた方法を紹介したいと思います。

まず上のファイルをcsv形式で保存します。
このあたり、Rへのファイルの読み込み方法は以前の記事で紹介しています、ご参考にして下さい。
Rにexcelで作ったファイルを読み込む方法【CSV形式で読み込みましょう】

今回はtest.csvというファイル名で上のファイルを保存しました。
まずはcsvファイルを読み込んでいきましょう。

 

 関数の説明

・read.csv( .csv):保存してあるCSVファイルを読み込みます。

・header=T:先頭の行を見出し行とみなしカウントしません。つまり2行目が1行目になります。

・testというファイル名はそのままRに読み込みました。

seq関数の使用

次に、早速抽出したい行の抜き出しを行います。
埼玉の行データだけほしい場合は、まず、埼玉データは何行目にあるのか見ておく必要があります。
csvファイルの読み込みのときにheader=Tとしているので、先頭行はカウントせず、2行目が1行目になります。

埼玉データは4行目~24行目にわたって4行おきに並んでいることがわかりました。
次に、seq関数で抜き出していきます。

 seq関数の説明

ファイル名 [ seq ( 対象の先頭行, 対象の最終行 , by=□ ) , ]

・「ファイル名」とは読み込み対象を含むファイルです。今回の場合はtestファイルが該当します

・seq ( 対象の先頭行, 対象の最終行 , by=□ ):対象の先頭行~最終行の範囲内を□行ごとに抜き出しますという意味です。
今回は24行のデータでしたので範囲は4,24で、埼玉は4,8,12・・・という4の倍数の行にありますので、byは4になります。

・最後にある , が重要で、このカンマの意味は「列を全て読み込む」という意味です。Rの基本的な行列の表現方法ですね。

csvファイルとして出力する

そして読み込んだファイルをCSVファイルに出力します。

 <関数の説明>

write.csv (出力したいファイル名, “ 保存する名称.csv” ):

出力したいファイルをcsvファイルに出力します。現在作業しているディレクトリへ出力します。

そうすると以下のように埼玉のデータだけを抽出した行が出力されます。

2つの行を抜き出したい場合

先ほどの行から埼玉だけではなく、神奈川も抜き出したい場合はどうすればよいでしょうか。

手順は以下です。

 ・先ほどのseq関数で埼玉データと神奈川データをそれぞれ抽出する。

・rbind関数でデータを連結する

まず、神奈川データを抜き出します。
神奈川のデータは最初が2行目、最後が22行目、間が4行です。

以下のような関数の書き方で神奈川データを抽出できます。

rbind関数で2つのデータを結合

次に埼玉データと神奈川データを結合して表示してみます。

 関数の説明

rbind (X, Y):XとYを縦に連結する(行の連結)

cbind (X,Y):XとYを横に連結する(列の連結)

このdfをcsvファイルに書き出してみます。


↑こちらの関数でcsvファイルに書き出すのでした。ファイル名そのままdfで書き出しています。

 


できました。埼玉データと神奈川データだけを抜き出すことができています。

 

一定の規則で並んでいない行を抽出したい場合

先ほどのseq関数は一定間隔に並ぶ行の抽出が可能でした。

しかし、取り出したい行がいつも一定間隔で並んでいるとは限りませんよね。

例えば、以下のtest.csvの1,3,9,11,12,14行目だけを抜き出したいとします。

↑ここから1,3,9,11,12,14行目だけを抜き出すには・・・


これで完了です。

 関数の説明

c ( ):カッコ内で構成されるベクトルを作ります。

つまり、抽出したい行or列をリクエストするベクトルを作るのです。

出来たdataファイルをcsvに読み込むと、

こんな感じで完成しました。

データ解析を教わりたい方へ

最後までお読みいただきありがとうございます。

少しだけ宣伝ですが、本日こちらに書いたようなデータ解析に関する内容を
プロから習いたいという方がいれば、おススメのサービスです。

RやPythonを効率的に学べると思いますので、興味ある方は覗いてみてもらえると良いと思います。

スキルのフリマ【ココナラ】

こんな形でリーズナブルにきちんと指導を受けれるかと思います。

本日は以上です。
ありがとうございました。

タイトルとURLをコピーしました