R データフレームからの抽出:
列指定、行指定とその両方
UB3/informatics/r/dataframe_extract
このページの最終更新日: 2024/09/30- 概要: データフレームからの抽出
- データフレームから特定の列を抽出する
- データフレームから特定の行を抽出する
- データフレームから特定の列・行を除く
- さまざまな条件指定のパターン
- 行番号と列番号の両方で指定する
広告
概要: データフレームからの抽出
このページでは、R のデータフレームから、特定の行または列を抽出する方法をまとめる。以前は自作のデータセットを使って解説していたのだが、組み込みデータセット を使った解説に変更した。
古いページも ここ に残してあるが、今後はこのページを更新していくことになる。
例として使うのは、mtcars という 組み込みデータセット を例に使ってみよう。これは、Mazda RX4 などの車の性能を収めたもので、行が車の種類、列が性能になっている。
データフレームから特定の列を抽出する
データラベルで指定する
基本的には、データラベルを使った取り出しを推奨する。データフレーム名、ドル記号、列のデータラベルを使う。
mpg
[1] 21.0 21.0 22.8 21.4 18.7 18.1... 後略
取り出された列はベクターになる。is.vector() 関数で確認することができる。
列番号で指定する
データフレームから、列番号の数字を使って特定の列を抜き出す場合。[ ] と列番号を使う。
この場合、
このようなときは、列番号の前にコンマを入れるとベクターとして取り出せる。
mpg3
[1] 21.0 21.0 22.8 21.4 18.7 18.1... 後略
あるいは [ ] を二重にしても OK。二重カギカッコの中に ,1 とするとエラーになる。
mpg4
[1] 21.0 21.0 22.8 21.4 18.7 18.1... 後略
select() 関数を使用する
列の抽出は、select() 関数を使う方法が便利である。ライブラリ dplyr を使う必要がある (参考: tidyverse パッケージ)。.data でデータフレームを指定し、その後に列番号を書く。syntax が直感的で覚えやすいのがいい。
詳細は select 関数 のページにまとめた。
library(dplyr)
A = select(.data = dataframe, 1,3) # 列番号で指定するパターン
A = select(.data = dataframe, 列名1, 列名2) # 列名で指定するパターン
既存のデータフレームから列を除くときは、マイナス記号を使える。複数の列を一気に除きたいときは、c でくくる。
A = select(.data = A, -c(列名1、列名2...))
データフレームから特定の行を抽出する
行番号を指定して行を抽出
データフレーム A から 2 行目だけを抜き出すときは、
2 行目から 3 行目までを抜き出すときは
のようにする。
ある数字より大きい・小さい行を抽出
まずは、「ある数字に等しい」条件。
列のラベルで指定する、イコールには == を使う、さらに行指定なので , が入る、という 3 つがポイントである。
mtcars[mtcars$cyl == 6,]
== の部分を < または > にすることで、ある数字より大きい・小さい行を抽出できる。
filter() 関数を使用する
R では、行ラベルは $ のような簡単な指定方法がないので、列ラベルに比べて扱いが難しい。多くの 組み込みデータセット がそうであるように、基本的には取り出したい項目を列に収めるのがよい。
filter() 関数は、指定した条件に従って特定の行を取り出す関数である。詳細は filter() 関数のページ にまとめてあるので、ここでは基本的な使い方のみを示す。
まず .data でデータセットを指定する。その次には論理式がくる。%in% は「等しい」という演算子で、filter 関数と共によく使われる。Blood_type %in% c("A") で血液型が A である列のみを取り出せることになる。
データフレームから特定の列・行を除く
R デフォルトの関数を使う場合、削除するというよりも、
たとえば、全体で 8 列のデータセットで、1 列目を除きたい場合はこうなる。
列を選択する select 関数、行を選択する filter 関数 を使う方法もある。基本的な用例を載せておく。詳細は各関数のページを参照のこと。
A = select(data, -列名1, -列名2) #複数を除くときはコンマで繋げられる
さまざまな条件指定のパターン
行番号と列番号の両方で指定する
> A
Blood_type | Body_weight | |
1 | A | 65 |
2 | A | 59 |
3 | B | 45 |
[1] 65
広告
References
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。