【集まれZ世代!】genzplyrでZ世代アピしていこう

dplyrの新しい仲間か…?

R
公開

2025年11月8日

はじめに

Hadley Wickhamが新しいRパッケージ{genzplyr}をリリースしたようだ。

Do you teach #rstats? Do your students complain about how lame and old-fashioned dplyr is? Don't worry: I have the solution for you: github.com/hadley/genzp.... genzplyr is dplyr, but bussin fr fr no cap.

[image or embed]

— Hadley Wickham (@hadley.nz) 2025年11月7日 8:25

最初にこれを見たときは「ジェンツプライヤー…?」という感じだったが、READMEを読んでみると、どうやら{dplyr}の関数をZ世代が好むスラングに置き換えたパッケージらしい。「ジェンツ」ではなく「Generation Z」だったみたいだ。

{genzplyr}のインストールと読み込み

このパッケージはネタだ。CRANには登録されておらず、GitHubからインストールする必要がある。

# install.packages("pak")
pak::pak("hadley/genzplyr")
library(genzplyr)
genzplyr loaded fr fr 💅
Your data wrangling is about to be bussin no cap

なんか粋ですね。

関数一覧

できることは{dplyr}とほぼ同じだが、関数名がZ世代のスラングに変わっている。もちろん英語なのでどういうスラングなのかはとんと検討もつかないが、以下に対応関係を列挙したい。

{dplyr}関数 {genzplyr}関数 意味
filter() yeet() バイブチェックに合格しない行を捨てる
select() vibe_check() 重要なカラムだけを残す
mutate() glow_up() データを最高の状態に変換
summarise() no_cap() 嘘なしの要約統計
arrange() slay() スレイファクター(完璧度)で並び替え
group_by() squad_up() データをスクワッド(グループ)に分ける
ungroup() disband() スクワッドを解散
rename() lowkey() こっそり名前を変更
distinct() periodt() 重複を削除(ピリオド=強調)
pull() main_character() 主役級のエネルギーでカラムを抽出
slice_head() send_it() 上位行を取得してフルコミット
count() its_giving() 統計っぽい雰囲気を出す

関数名が違うというところ以外は{dplyr}と全く同じように使える。意味のところは最近ChatGPTから乗り換えたClaudeに書いてもらったものだが、なんかおもろい。

使い方の例

まずは普通の{dplyr}のコードを書いてみる。

library(dplyr)

iris |>
  filter(Species == "setosa") |>
  select(Sepal.Length, Sepal.Width) |>
  mutate(Sepal.Ratio = Sepal.Length / Sepal.Width) |>
  summarise(
    avg_length = mean(Sepal.Length),
    avg_width = mean(Sepal.Width),
    avg_ratio = mean(Sepal.Ratio)
  )
  avg_length avg_width avg_ratio
1      5.006     3.428  1.470188

“setosa”種のアヤメのがく片の長さと幅を使って、がく片比率を計算し、その平均を求めている。

同じ処理を{genzplyr}で書くとこうなる。

iris |>
  yeet(Species == "setosa") |>
  vibe_check(Sepal.Length, Sepal.Width) |>
  glow_up(Sepal.Ratio = Sepal.Length / Sepal.Width) |>
  no_cap(
    avg_length = mean(Sepal.Length),
    avg_width = mean(Sepal.Width),
    avg_ratio = mean(Sepal.Ratio)
  )
  avg_length avg_width avg_ratio
1      5.006     3.428  1.470188

同じ結果が得られている。

パッケージのコードを覗きに行ってみたが、yeet <- function(.data, ...) { filter(.data, ...) }のように、単に{dplyr}の関数をラップしているだけだった。なので同じ結果が得られるのは当然である。

ちなみに

My favourite function is bussin() — it doesn't do anything, but you can use it to label chains of operation that you are particularly proud of.

— Hadley Wickham (@hadley.nz) 2025年11月7日 8:26

bussin()という関数もあるらしいが、これは全く何もせず、受け取った関数をそのまま返すだけの関数らしい。“bussin”はZ世代のスラングで「本当に良い、素晴らしい」という意味らしく、自分が特に気に入っている処理チェーンにラベルを付けるために使うとのこと。

mtcars |>
  yeet(hp > 100) |>
  bussin() |> # 👈 ここで「いい感じじゃん!」って確認
  vibe_check(mpg, hp) |>
  bussin() |> # 👈 また「まだまだbussin!」
  glow_up(efficiency = mpg / hp) |>
  yeet(efficiency > 0.2)
              mpg  hp efficiency
Lotus Europa 30.4 113  0.2690265

コメントはClaudeにつけてもらった(笑)

おわりに

実務で使うことはなさそうだが、Hadley Wickhamが作っただけあって公式のおふざけ、みたいな感じが面白いパッケージだと思う。

使う機会はないかもしれないが、Z世代にも追いついてくるRということでこれからもよろしく✋