across()の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
! 列を選んで関数を適用する

 across(列名, 関数) #基本形

列名の部分には条件式が適用できるので、列の名称の文字の部分一致とか、列の型(数値型のみ。。など)による選択が可能。

関数は、sum, mean, sd, などの定番の他、functionで定義した自作関数も使える。

 library(tidyverse)
 d <- " ID, name,国語,算数,英語
        001, 太郎, 100,  90,欠席
        002, 次郎,  90,  80,  20
        003, 三郎,  80,欠席,  50
        004, 花子,  70,  50, 100
        005, 桃子,  60,  60,  90"

上記データを読み込むと、算数と英語は文字列型になってしまう。

そこで以下の処理をする。
* acrossで対象とする列を指定する(下記例は、対象としない列を除く方法)。

 d %>% 
  mutate(
    across(
      .cols = !c("ID","name"), 
      .fns = ~{
        if (is.character(.x)) {
        if (is.character(.x)) {       #.xはcolsで指定された列の一つずつを指す
          if_else(.x == "欠席", NA_character_,.x) %>% as.numeric()
        } else {
          .x
        }
      }
    )
  )
 #r-wakalangで@KDさんに教わった

この他、parse_numberを使う方法もある

:参照:

* https://qiita.com/shunido113/items/701844f03163ec413eb8