dplyr::storms |>
dplyr::slice(1:10)行の抽出
順番を基準に行を抽出
dplyr::slice
- 指定した行を抽出
- 例えば、以下は先頭から10行分を抽出するコード
条件に当てはまる行の抽出
dplyr::filter
- 条件に一致する行を抽出
- 引数には条件文を入力
数値での条件指定
dplyr::storms |>
dplyr::filter(year >= 2010) # 2010年以降のデータを抽出文字列での条件指定
dplyr::storms |>
dplyr::filter(name == "Dolly") # name が Dolly のデータを抽出条件の並列
- \& (=and)、\| (=or) 演算子を使う
dplyr::storms |>
dplyr::filter(name == "Dolly" & year == 2020) # name が Dolly で、かつ2020年のデータを抽出dplyr::storms |>
dplyr::filter(name == "Dolly" | year == 2020) # name が Dolly か、もしくは2020年のデータを抽出- 「〜以上〜以下」: filter(between())
dplyr::storms |>
dplyr::filter(
wind |> dplyr::between(75, 100)
) # wind が75以上100以下のデータを抽出if_any と if_all
- dplyr::if_any(列名, 条件)
- 指定した列のうち少なくとも1列以上条件を満たした行すべて
tidyr::billboard |>
dplyr::filter(
dplyr::if_any(dplyr::starts_with("wk"), ~ . < 10) ## wkから始まる列の中で、1列でも10未満の値がある行を全て抽出
) - dplyr::if_all(列名, 条件)
- 指定した列すべてで条件を満たした行すべて
tidyr::billboard |>
dplyr::filter(
dplyr::if_all(dplyr::num_range("wk", 1:20), ~ . < 50) ## wk1からwk20までの列の中で、全ての列の値が50未満である行を全て抽出
) 否定条件
- !を式の前に付ければ 否定 となる
- なお、==の否定は!=と表記
dplyr::storms |>
dplyr::filter(!(year < 2000) & status != "tropical wave
") # 2000年以前ではなく、 (=2000年以降の) かつ status が tropical wave でないデータを抽出- dplyr::filter( !is.na() ) でもNA行の除外が可能
- 対象列が1行ならdplyr::filterの方が楽かもしれないが、複数行にまたがるならtidyr::drop_na() の使用を推奨
dplyr::starwars |>
dplyr::filter(!is.na(hair_color))正規表現による条件指定
- filter( str_detect(列名, “正規表現”) )
dplyr::storms |>
dplyr::filter(
status |> stringr::str_detect("^tropical") # statusがtropicalで始まる行を抽出
)