(旧ページ) R データフレームからの抽出:
列指定、行指定とその両方
UB3/informatics/r/dataframe_extract_blood
このページの最終更新日: 2024/09/30このページでは、自作のデータセットを使って列、行の抽出をまとめてある。2022 年 12 月に 新しいページ を組み込みデータセットを使って更新したので、今後はそちらを参照のこと。
このページもネット上に残してあるが、更新は 2022 年 12 月でストップしている。
- 概要: このページで扱うデータフレーム
- データフレームから特定の列を抽出する
- データフレームから特定の行を抽出する
- 行番号を指定して行を抽出
- 文字列を指定して行を抽出
- ある数字より大きい・小さい行を抽出
- filter 関数を使用する
- データフレームから特定の列・行を除く
- さまざまな条件指定のパターン
- 行番号と列番号の両方で指定する
広告
概要: このページで扱うデータフレーム
このページでは、以下の整然データのデータフレームから、特定の行または列を抽出する方法をまとめる。整然データについては、データフレームの概要と作成 のページを参照のこと。
行を取り出す場合は、それぞれのサンプルを抽出することになる。したがって、値の代償で指定する場合などは、行単位で抽出することになるケースが多いだろう。
列を取り出す場合は、特定のパラメーターについて、全てのサンプルのデータを抽出するという意味合いになる。
Blood_type | Body_weight | |
1 | A | 65 |
2 | A | 59 |
3 | B | 45 |
データフレームから特定の列を抽出する
データラベルで指定する
基本的には、データラベルを使った取り出しを推奨する。この場合はドル記号を使う。以下のような
Blood_type | Body_weight | |
1 | A | 65 |
2 | A | 59 |
3 | B | 45 |
一列目の Blood_type および Body_weight が列ラベルであるので、以下のように Blood_type を指定することで、1 列目のみを取り出し、オブジェクト B として保存することができる。
列番号で指定する
データフレーム A から 2 列目だけを抜き出すときは、[ ] と列番号を使って
とする。しかし、
Body_weight
1 65
2 59
3 45
このようなときは、列番号の前にコンマを入れるとベクトルとして取り出せる。なお、is.vector(B) とすると、B がベクトルなら TRUE、そうでないなら FALSE という結果が返ってくる。
[1] 65 59 45
あるいは [ ] を二重にしても OK。この二重かぎカッコ [[ ]] は、$ とは微妙に動作が異なる。[[ ]] では式が展開されるが、$では展開されないようである。
[1] 65 59 45
select 関数を使用する
連続しない複数列を抽出したい場合は、select 関数が便利である。ライブラリー dplyr を使う必要がある。インストールされていないならまず install.packages でインストールし、読み込んでから使う。.data でデータフレームを指定し、その後に列番号を書く。syntax が直感的で覚えやすいのがいい。
詳細は select 関数 のページにまとめた。
library(dplyr)
A = select(.data = dataframe, 1,3)
既存のデータフレームから列を除くときも、マイナス記号を使える。複数の列を一気に除きたいときは、c でくくる。
A = select(.data = A, -c(列名1、列名2...))
データフレームから特定の行を抽出する
行番号を指定して行を抽出
Blood_type | Body_weight | |
1 | A | 65 |
2 | A | 59 |
3 | B | 45 |
このようなデータフレーム A から 2 行目だけを抜き出すときは、
Blood_type Body_weight
2 A 59
2 行目から 3 行目までを抜き出すときは
Blood_type Body_weight
2 A 59
3 B 45
文字列を指定して行を抽出
ラベル指定、イコールには == を使い、行指定なので , が入るという 3 つがポイント。
> A
Blood_type | Body_weight | |
1 | A | 65 |
2 | A | 59 |
3 | B | 45 |
Blood_type | Body_weight | |
3 | B | 45 |
単に A$Blood_type=="B" とすると、[1] FALSE FALSE TRUE という答えが帰ってくる。
ある数字より大きい・小さい行を抽出
文字列一致と似ている。まずラベルを指定し、大小は < または > で指定。最後に , をつける。似たような内容が R: 数値の大小でカットオフまたは 0/1 に変換する のページにもあるので、そちらも参照のこと。
> A
Blood_type | Body_weight | |
1 | A | 65 |
2 | A | 59 |
3 | B | 45 |
Blood_type | Body_weight | |
3 | B | 45 |
filter 関数を使用する
R では、行ラベルは $ のような簡単な指定方法がないので、列ラベルに比べて扱いが難しい。多くの 組み込みデータセット がそうであるように、基本的には取り出したい項目を列に収めるのがよい。
filter 関数は、指定した条件に従って特定の行を取り出す関数である。詳細は filter 関数のページ にまとめてあるので、ここでは基本的な使い方のみを示す。
まず .data でデータセットを指定する。その次には論理式がくる。%in% は「等しい」という演算子で、filter 関数と共によく使われる。Blood_type %in% c("A") で血液型が A である列のみを取り出せることになる。
Blood_type Body_weight
1 A 65
2 A 59
もっと単純に、
でも同じ結果になる。
データフレームから特定の列・行を除く
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
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。