Rは列単位での演算はとても便利だが、行単位での演算がやってみると割と面倒。おそらく、列はデータの項目、行はデータを表すという考え方が背景にある。apply() を使うと行単位での関数の適用ができる。
apply(dat, 1, sum)
しかし、datがデータフレームの場合、数値型だけではないのでエラーが出るし特定の列だけを演算の対象にしたい場合に困る。
dat <- tibble( a = sample(1:6,100,replace=TRUE), b = sample(1:6,100,replace=TRUE), c = sample(1:6,100,replace=TRUE) )
dat %>% rowwise() %>% mutate(res = sum(c_across(), na.rm=TRUE)) %>% ungroup()
> df |> rowwise() |> mutate(m = mean(c(x,y,z))) # A tibble: 6 × 4 # Rowwise: x y z m <dbl> <dbl> <dbl> <dbl> 1 0.407 0.553 0.891 0.617 2 0.0314 0.840 0.197 0.356 3 0.291 0.699 0.524 0.505 4 0.370 0.217 0.815 0.467 5 0.951 0.483 0.950 0.795 6 0.897 0.515 0.527 0.646 > df |> mutate(m = mean(c(x,y,z))) # A tibble: 6 × 4 x y z m <dbl> <dbl> <dbl> <dbl> 1 0.407 0.553 0.891 0.564 2 0.0314 0.840 0.197 0.564 3 0.291 0.699 0.524 0.564 4 0.370 0.217 0.815 0.564 5 0.951 0.483 0.950 0.564 6 0.897 0.515 0.527 0.564
mの列を見ると、rowwise()を適用した上の演算は、各行ごとに演算ができているが、適用していない下のほうはm列の値が全て同じになっている。
通常、Rではベクトル同士の演算は、ベクトルを返してくるが、mean()、sum()などのようにスカラーしか返してこない関数を行単位で適用したいときに、有力に使える。