Search code examples
rdplyrdata-wrangling

Mutate across multiple columns using dplyr


I am trying to calculate rowwise averages for a number of columns. Could somebody please explain why the code below only calculates the mean for the two variables in the code (var_1 and var_13), rather than the mean for all 13 columns?

df %>% 
rowwise() %>%
  mutate(varmean = mean(var_1:var_13)) -> df

Solution

  • Two possibilities using dplyr:

    library(dplyr)
    
    mtcars %>% 
      rowwise() %>% 
      mutate(varmean = mean(c_across(mpg:vs)))
    

    This returns

    # A tibble: 32 x 12
    # Rowwise: 
         mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb varmean
       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>
     1  21       6  160    110  3.9   2.62  16.5     0     1     4     4    40.0
     2  21       6  160    110  3.9   2.88  17.0     0     1     4     4    40.1
     3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1    31.7
     4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1    52.8
     5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2    73.2
     6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1    47.7
     7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4    81.2
     8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2    33.1
     9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2    36.7
    10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4    42.8
    # ... with 22 more rows
    

    and without rowwise() and using base Rs rowMeans():

    mtcars %>% 
      mutate(varmean = rowMeans(across(mpg:vs)))
    

    returns

                         mpg cyl  disp  hp drat    wt  qsec vs am gear carb  varmean
    Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4 39.99750
    Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4 40.09938
    Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1 31.69750
    Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1 52.76687
    Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2 73.16375
    Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1 47.69250
    Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4 81.24000
    Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2 33.12250
    Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2 36.69625
    Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4 42.80750