第5章 tidyverse(dplyr)で再現 ・ ノック 78 / 100 ・ [[000 - はじめに(使い方と目次)|目次]]<br> ← 前 [[077 - 条件で値を振り分ける]] ・ 次 → [[079 - 二つの表をつなぐ]] > [!info] across() は複数列に同じ関数を一括で適用します > **`across()`**(アクロス)は、「複数の列に対して同じ関数を繰り返し適用する」ための仕組みです。`summarise()` や `mutate()` の中で使います。`across(where(is.numeric), mean)` と書くと「数値型のすべての列に `mean()` を適用する」という意味になります。 > > `where(is.numeric)` の `where()` は「条件に合う列を選ぶ」セレクター関数で、`is.numeric` は「数値型かどうか」を判定します。Rベースでは `sapply(iris[, 1:4], mean)` のように列の範囲を手動で指定していましたが、`across(where(is.numeric), mean)` と書くと「数値列すべてに mean を当てる」という意図が明確に伝わります。 ## 問題 `iris` の数値列(4列)すべての平均値を `summarise()` と `across()` を使って一度に求めてみましょう。 > [!tip] ヒント > `summarise(across(where(is.numeric), mean))` の形で書きます。`where(is.numeric)` が「数値の列すべて」を選んでくれます。 > [!success]- 回答を見る > ```r > library(dplyr) > iris %>% summarise(across(where(is.numeric), mean)) > ``` > ``` > Sepal.Length Sepal.Width Petal.Length Petal.Width > 1 5.843333 3.057333 3.758 1.199333 > ``` > Rベースでは `sapply(iris[, 1:4], mean)` と書いていましたが、`across(where(is.numeric), mean)` を使うと列番号を指定せず「数値列すべて」とまとめて指定できます。