目次(まとめ)

  • ◾️ CSVファイルからRのデータフレームを準備

  • ◾️ 指定したい行の名前を別ファイルから読み込む

  • ◾️ 関連記事


Rで作ったデータフレームを扱っています。行名を指定して行を取り出したいけれど、取り出した行が複数あって苦労しています。解決策はありますか?

取り出したい行名を別ファイルで準備しておいて、そのファイルを読み込むことで、行の取り出しを自動化することができます。

CSVファイルからRのデータフレームを準備

ここでは、以下のようなエクセルデータを "test.csv" という名前でデスクトップに保存して、説明に用います。

"test.csv" は、CSV(コンマ区切り)ファイルなので、Rで以下のように読み込むことができます(詳細は、こちらの記事をご参照ください)。

$ R -q
> data <- read.csv("~/Desktop/test.csv", header = T, row.names = 1)
> data
        Math     Science
A -0.3153816  0.26553345
B  0.7258541 -1.39414658
C  1.4456824  1.23403342
D -1.2046314 -0.16611958
E  1.3916466 -0.09483074

例えば、このデータフレームから、行の名前が "A" の行だけ取り出す場合には、以下のように実行します。

> data[rownames(data)=="A",]
  Math English
A   53      86

同じように、行の名前が "A" と "B" の行だけ取り出す場合には、以下のように実行します。

> data[rownames(data)=="A" | rownames(data)=="B",]
  Math English
A   53      86
B   46      75

ここで、記号 "|" (パイプ)は、「または」という意味になるので、行の名前が "A" か "B" であれば、その行が取り出されることになり、結果的に、"A" と "B" の行だけ取り出されてきます。

"A" と "B" を取り出したいからといって、記号 "&" を使って「かつ」を指定すると、必要なデータを取り出せないので注意してください(行の名前が "A" であってかつ "B" という状況があり得ないからです)。

指定したい行の名前を別ファイルから読み込む

上で紹介した方法は、データが少なければ、このような処理で対応できます。

しかし、データが多くなってくると、取り出したい全ての行を手作業で指定するのは大変です。

そこで、あらかじめ、取り出したい行の名前を別ファイルで準備して利用することができます。

ここでは、以下のようなエクセルデータを "test_names.csv" という名前でデスクトップに保存して、説明に用います。

Rで以下のように読み込みます。

> name <- read.csv("~/Desktop/test_names.csv", header = T)

これにより、指定したい行の名前が、"name$Name" という変数に入ることになります。

> name$Name
[1] "A" "B"

もともとのデータフレーム "data" から、"name$Name" に含まれる行だけを取り出すためには、以下のように実行します。

> data[rownames(data)%in%name$Name==TRUE,]
  Math English
A   53      86
B   46      75

"%in%" を使って、「"name$Name" に含まれている "rownames(data)" の行」を指定しています。

関連記事


今回の記事では、Rで作ったデータフレームから、行名を使って、複数の行を取り出す方法を紹介しました。いろんな場面に応用できるので、覚えておきましょう。

B!