【R言語チュートリアル②】データフレームの利用

# はじめに
今回は、R言語によるデータフレームの利用についてのまとめです。

データフレームはR言語の中核で、構造化されたデータを効果的に格納・処理できるため、統計分析から可視化まで多くのデータ操作タスクで利用されます。この機能は異なるデータソースからの情報を結合・整理し、容易にアクセスできるため、データ解析や予測モデルの構築など、データ関連の作業において不可欠です。データフレームはデータサイエンスと統計分析の分野で特に重要な役割を果たします。

※今回は、動作確認のため自作した簡易的なデータフレームを使用しています。

## データフレームを読み込む
データフレームを読み込む際には、`read.csv()`を使用します。
```R:R
df = read.csv("sample.csv")
```
**結果**
```R:R
> df
   age sex   weight   height
1   48   F 73.29791 182.3398
2   32   F 37.72677 176.3436
3   31   M 62.28208 174.1202
4   20   M 72.86549 177.9359
5   59   M 57.79488 168.4759
6   60   M 74.34550 167.7110
7   54   F 78.00177 160.9921
8   31   M 68.36069 162.6497
9   42   M 82.42919 155.7231
10  43   F 60.65615 176.1928

```
以下はコマンドと使用法です。
| コマンド | 使用法 |
|:-:|:-:|
| read.csv(input_dir, header)  |  データフレームを読み込む。<br>csvファイルだけでなくtxtファイルも読み込むことができる。</br> |
|  input_dir |  データフレームが保存されているディレクトリを指定する。 |
|  header |  データフレームに列名を記載するかを指定する。<br>（TRUE：列名あり、FALSE：列名なし）</br> |

## データの抽出
### 列番号で指定する
データを抽出する際には、**列番号**を使用して抽出することができます。
```R:R
> df[1]
   age
1   48
2   32
3   31
4   20
5   59
6   60
7   54
8   31
9   42
10  43

> df[2:4]
   sex   weight   height
1    F 73.29791 182.3398
2    F 37.72677 176.3436
3    M 62.28208 174.1202
4    M 72.86549 177.9359
5    M 57.79488 168.4759
6    M 74.34550 167.7110
7    F 78.00177 160.9921
8    M 68.36069 162.6497
9    M 82.42919 155.7231
10   F 60.65615 176.1928
```
:::note warn
警告
この場合、取り出されたデータは**データフレーム**になることに注意。
:::
<br></br>
**ベクトル化**
ベクトルとして扱いたい場合は、以下のように`,`を加える、または`$`記法を使います。
```R:R
> df[, 1]
 [1] 48 32 31 20 59 60 54 31 42 43

> df$age
 [1] 48 32 31 20 59 60 54 31 42 43 
```

## 行番号で指定する
データフレームから行単位で抽出したい場合は、以下のように実行する。
```R:R
> df[1, ]
  age sex   weight   height
1  48   F 73.29791 182.3398

> df[3:6, ]
  age sex   weight   height
3  31   M 62.28208 174.1202
4  20   M 72.86549 177.9359
5  59   M 57.79488 168.4759
6  60   M 74.34550 167.7110
```

## 抽出条件を指定する
データフレームから、指定した条件でデータを抽出する際には、以下のように記述します。
```R:R
> df[df$sex == "M", ]
   age sex   weight   height
3   31   M 62.28208 174.1202
4   20   M 72.86549 177.9359
5   59   M 57.79488 168.4759
6   60   M 74.34550 167.7110
8   31   M 68.36069 162.6497
9   42   M 82.42919 155.7231

> df[df$weight > 60 & df$height < 160, ]
  age sex   weight   height
9  42   M 82.42919 155.7231

> df[df$sex != "M" & df$age > 40 & df$age < 50 & df$weight > 60, ]
   age sex   weight   height
1   48   F 73.29791 182.3398
10  43   F 60.65615 176.1928
```
<br></br>
**subset()を用いた抽出条件の指定**
指定した条件でデータを抽出する際には、`subset()`を使用して以下のように記述します。
```R:R
> subset(df, df$sex == "M")
   age sex   weight   height
3   31   M 62.28208 174.1202
4   20   M 72.86549 177.9359
5   59   M 57.79488 168.4759
6   60   M 74.34550 167.7110
8   31   M 68.36069 162.6497
9   42   M 82.42919 155.7231

> subset(df, df$weight > 60 & df$height < 160)
  age sex   weight   height
9  42   M 82.42919 155.7231

> subset(df, df$sex != "M" & df$age > 40 & df$age < 50 & df$weight > 60)
   age sex   weight   height
1   48   F 73.29791 182.3398
10  43   F 60.65615 176.1928
16  46   F 65.67870 166.2520
```
以下はコマンドと使用法です。
| コマンド | 使用法 |
|:-:|:-:|
| subset(df, conditions)  |  データフレームから条件を満たすデータを抽出する。 |
| conditions  | 抽出条件。行単位だけでなく、列名を条件に加えることで<br></br>列単位で抽出することも可能。  |


## データフレームを出力する
作成したデータフレームは`write.table()`を使用します。
```R:R
output_df =  df[df$sex != "M" & df$age > 40 & df$age < 50 & df$weight > 60, ]

> output_df
   age sex   weight   height
1   48   F 73.29791 182.3398
10  43   F 60.65615 176.1928
16  46   F 65.67870 166.2520

read.table(output_df, "output_df.csv", append = F,sep = ",", row.names = FALSE, col.names = TRUE)
```
**結果**
```R:R
#保存したoutput_df.csvを読み込む
> new_df = read.csv("output_df.csv")

> new_df
  age   sex   weight   height
1  48 F 73.29791 182.3398
2  43 F 60.65615 176.1928
3  46 F 65.67870 166.2520
```
無事、データフレームが出力されていることを確認できました。

## まとめ

今回は、R言語によるデータフレームの利用についてまとめました。R言語はデータの統計や分析に使用されることが多いため、データフレームを気軽に扱える必要があります。加工したデータフレームを用いて、更なる分析やグラフ化をするなど、今回の学習内容はR言語の活用において重要な役割を果たします。

次はR言語を使用した線形モデルによる回帰分析をまとめていきたいと思います。

**前**：[【R言語チュートリアル①】ベクトル、行列の四則演算](https://qiita.com/Yuhei0531/items/02a39c05edb915585662)
**次**：準備中