R データフレームからの抽出:
列指定、行指定とその両方

UB3/informatics/r/dataframe_extract

このページの最終更新日: 2024/09/30

  1. 概要: データフレームからの抽出
  2. データフレームから特定の列を抽出する
  3. データフレームから特定の行を抽出する
  4. データフレームから特定の列・行を除く
  5. さまざまな条件指定のパターン
    • 行番号と列番号の両方で指定する

広告

概要: データフレームからの抽出

このページでは、R のデータフレームから、特定の行または列を抽出する方法をまとめる。以前は自作のデータセットを使って解説していたのだが、組み込みデータセット を使った解説に変更した。

古いページも ここ に残してあるが、今後はこのページを更新していくことになる。

例として使うのは、mtcars という 組み込みデータセット を例に使ってみよう。これは、Mazda RX4 などの車の性能を収めたもので、行が車の種類、列が性能になっている。

R mtcars データセット

データフレームから特定の列を抽出する

データラベルで指定する

基本的には、データラベルを使った取り出しを推奨する。データフレーム名、ドル記号、列のデータラベルを使う。

mpg <- mtcars$mpg
mpg
[1] 21.0 21.0 22.8 21.4 18.7 18.1... 後略

取り出された列はベクターになる。is.vector() 関数で確認することができる。


列番号で指定する

データフレームから、列番号の数字を使って特定の列を抜き出す場合。[ ] と列番号を使う。

mpg2 <- mtcars[1]

この場合、取り出したデータもデータフレームになる。データラベルを使った抽出と挙動が違うので注意。

R mtcars データセット

このようなときは、列番号の前にコンマを入れるとベクターとして取り出せる。

mpg3 <- mtcars[,1]
mpg3
[1] 21.0 21.0 22.8 21.4 18.7 18.1... 後略

あるいは [ ] を二重にしても OK。二重カギカッコの中に ,1 とするとエラーになる。

mpg4 <- mtcars[[1]]
mpg4
[1] 21.0 21.0 22.8 21.4 18.7 18.1... 後略


select() 関数を使用する

列の抽出は、select() 関数を使う方法が便利である。ライブラリ dplyr を使う必要がある (参考: tidyverse パッケージ)。.data でデータフレームを指定し、その後に列番号を書く。syntax が直感的で覚えやすいのがいい。

詳細は select 関数 のページにまとめた。

install.packages("dplyr") # 初回のみ
library(dplyr)
A = select(.data = dataframe, 1,3) # 列番号で指定するパターン
A = select(.data = dataframe, 列名1, 列名2) # 列名で指定するパターン

既存のデータフレームから列を除くときは、マイナス記号を使える。複数の列を一気に除きたいときは、c でくくる。

A = select(.data = A, -列名)
A = select(.data = A, -c(列名1、列名2...))


データフレームから特定の行を抽出する

行番号を指定して行を抽出

R mtcars データセット

データフレーム A から 2 行目だけを抜き出すときは、

mtcars[2,]

2 行目から 3 行目までを抜き出すときは

mtcars[2:3,]

のようにする。


ある数字より大きい・小さい行を抽出

まずは、「ある数字に等しい」条件。

列のラベルで指定する、イコールには == を使う、さらに行指定なので , が入る、という 3 つがポイントである。

mtcars[mtcars$cyl == 6,]

R mtcars 数字の大小で抽出

== の部分を < または > にすることで、ある数字より大きい・小さい行を抽出できる。


filter() 関数を使用する

R では、行ラベルは $ のような簡単な指定方法がないので、列ラベルに比べて扱いが難しい。多くの 組み込みデータセット がそうであるように、基本的には取り出したい項目を列に収めるのがよい。

filter() 関数は、指定した条件に従って特定の行を取り出す関数である。詳細は filter() 関数のページ にまとめてあるので、ここでは基本的な使い方のみを示す。

まず .data でデータセットを指定する。その次には論理式がくる。%in% は「等しい」という演算子で、filter 関数と共によく使われる。Blood_type %in% c("A") で血液型が A である列のみを取り出せることになる。

filter(mtcars, mpg > 30)

R mtcars filterで抽出

データフレームから特定の列・行を除く

R デフォルトの関数を使う場合、削除するというよりも、除きたいもの以外を別オブジェクトに保存する と考えるのがよい (4)。したがって、上記のリンクから「データフレームの抽出」を参照のこと。

たとえば、全体で 8 列のデータセットで、1 列目を除きたい場合はこうなる。

A2 = A[2:8]

列を選択する select 関数、行を選択する filter 関数 を使う方法もある。基本的な用例を載せておく。詳細は各関数のページを参照のこと。

A = select(data, -列名)
A = select(data, -列名1, -列名2) #複数を除くときはコンマで繋げられる


さまざまな条件指定のパターン

行番号と列番号の両方で指定する

> A

Blood_type Body_weight
1 A 65
2 A 59
3 B 45

A[1,2] #行、列の順に指定

[1] 65


広告

References

  1. Rの data frame から行や列を選択して取り出す. Link.
  2. Rでデータフレームからデータを抽出 (検索). Link: Last access 2019/10/24.

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。