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)) {       #.xはcolsで指定された列の一つずつを指す
         if_else(.x == "欠席", NA_character_,.x) %>% as.numeric()
       } else {
         .x
       }
     }
   )
 )
#r-wakalangで@KDさんに教わった

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

参照