P4.2. across関数で複数列をまとめて処理する
naiman_c3 <- naiman_c2 %>%
mutate(across(
starts_with(“q4s”),
~ 11 – .x ))
このコードは、これまで学んだ<-
, %>%
, mutate
に、以下の3つの新しい要素が加わっています。
① across()
(一括処理)
mutate
の中で使い、「たくさんの列に、同じ処理をまとめて実行する」ための関数です。
across(【対象の列】, 【実行する処理】)
という構成で使います。
② starts_with("q4s")
(対象の選択)
across
の1つ目の引数で、どの列を処理対象にするかを選びます。
ここでは「q4s
という文字で名前が始まるすべての列」を選択しています。
他にも、以下のような選び方ができます。
ends_with("_a")
:_a
で終わる列contains("scale")
:scale
を含む列q1:q10
:q1
からq10
までの全ての列
③ ~ 11 - .x
(処理の指定)
across
の2つ目の引数で、選択した列に何をするかを指定します。
ここでは逆転項目処理の計算式としています。
ちょっとややこしいのですが、以下のルールを知っておく必要があります。
~
(チルダ): 「これから処理内容を書きます」という合図。.x
:across
が処理している「その列自身」を指す代名詞です。
つまり、~ 11 - .x
は「選択された各列の値(.x
)を使って、11 - .x
を計算しなさい」という意味になります。
全体の日本語訳
「naiman_c2
を使い、
その中の『q4s
で始まる名前の全列』に対して、
それぞれ『11
からその値を引く』という計算で値を上書きし、
その結果すべてをnaiman_c3
に保存してね。」
?????
なんで11から引くの? → 前処理の逆転項目の章を参照