dplyr の基本動詞(filter,
select, mutate,
arrange)を使える|> を使って処理を連結できるdplyr
は,データフレームを操作するための強力なパッケージです。
| 動詞 | 意味 | Excelで例えると |
|---|---|---|
filter() |
行を絞り込む | フィルタ機能 |
select() |
列を選ぶ | 列の選択・非表示 |
mutate() |
新しい列を追加・変換 | 数式で新列作成 |
arrange() |
並び替え | 昇順・降順ソート |
summarise() |
集計(次回) | AVERAGE・SUM関数 |
group_by() |
グループ化(次回) | ピボットテーブル |
今日は msleep(哺乳類の睡眠データ)を使います。
## Rows: 83
## Columns: 11
## $ name <chr> "Cheetah", "Owl monkey", "Mountain beaver", "Greater shor…
## $ genus <chr> "Acinonyx", "Aotus", "Aplodontia", "Blarina", "Bos", "Bra…
## $ vore <chr> "carni", "omni", "herbi", "omni", "herbi", "herbi", "carn…
## $ order <chr> "Carnivora", "Primates", "Rodentia", "Soricomorpha", "Art…
## $ conservation <chr> "lc", NA, "nt", "lc", "domesticated", NA, "vu", NA, "dome…
## $ sleep_total <dbl> 12.1, 17.0, 14.4, 14.9, 4.0, 14.4, 8.7, 7.0, 10.1, 3.0, 5…
## $ sleep_rem <dbl> NA, 1.8, 2.4, 2.3, 0.7, 2.2, 1.4, NA, 2.9, NA, 0.6, 0.8, …
## $ sleep_cycle <dbl> NA, NA, NA, 0.1333333, 0.6666667, 0.7666667, 0.3833333, N…
## $ awake <dbl> 11.9, 7.0, 9.6, 9.1, 20.0, 9.6, 15.3, 17.0, 13.9, 21.0, 1…
## $ brainwt <dbl> NA, 0.01550, NA, 0.00029, 0.42300, NA, NA, NA, 0.07000, 0…
## $ bodywt <dbl> 50.000, 0.480, 1.350, 0.019, 600.000, 3.850, 20.490, 0.04…
| 列名 | 説明 |
|---|---|
name |
動物名 |
genus |
属 |
vore |
食性(herbi, omni, carni, insecti) |
order |
目 |
sleep_total |
1日の総睡眠時間(時間) |
sleep_rem |
REM睡眠時間(時間) |
sleep_cycle |
睡眠サイクル(時間) |
awake |
覚醒時間(時間) |
brainwt |
脳の重さ(kg) |
bodywt |
体重(kg) |
|>パイプ演算子 |>
は,処理を連続して書くための道具です。
# パイプなし
result <- arrange(filter(msleep, vore == "carni"), sleep_total)
# パイプあり(読みやすい!)
result <- msleep |>
filter(vore == "carni") |>
arrange(sleep_total)読み方:
|>は「それを〇〇に渡す」と読みます。データ |> 処理→ 「データを処理にかける」
| 記号 | 意味 |
|---|---|
== |
等しい |
!= |
等しくない |
> / < |
より大きい / より小さい |
>= / <= |
以上 / 以下 |
& または , |
かつ(AND) |
\| |
または(OR) |
is.na() |
欠損値である |
!is.na() |
欠損値でない |
# 脳の割合(脳重量 / 体重)を計算
msleep |>
select(name, brainwt, bodywt) |>
mutate(brain_ratio = brainwt / bodywt) |>
filter(!is.na(brain_ratio)) |>
arrange(desc(brain_ratio))# 草食動物の中で睡眠時間が長い上位5種を表示
msleep |>
filter(vore == "herbi") |>
select(name, sleep_total, bodywt) |>
arrange(desc(sleep_total)) |>
head(5)msleep から以下の条件に合う動物を抽出してください。
vore == "omni")だけ抽出bodywt)が 100 kg 以上の動物だけ抽出herbi)かつ睡眠時間が 8 時間以上の動物を抽出msleep
から動物名・食性・総睡眠時間・体重の4列だけを選んだデータフレームを作ってください。
filter() で行を絞り込むselect() で列を選ぶmutate() で新しい列を作る・変換するarrange() で並び替える|> で処理をつなげると読みやすいsummarise() と group_by()
によるデータ集計を学びます