Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

R – Calculate means including all factor levels but one

lets say, we use the dataframe mtcars and I would like to add the column qsec_control which is calculated as the mean(qsec) of all rows that don’t have the same cyl as the current row (e.g. if cyl == 6, it would take mean(qsec[cyl != 6]) ).
The question feels somewhat dumb, but I cant figure out how to do this.

Thanks in advance

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

This solution groups by cyl, then uses dplyr::cur_group_rows() to index into mtcars$qsec:

library(dplyr)

mtcars %>%
  group_by(cyl) %>%
  mutate(
    qsec_control = mean(mtcars$qsec[-cur_group_rows()])
  ) %>%
  ungroup()
# A tibble: 32 × 12
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb qsec_cont…¹
   <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        17.8
 2  21       6  160    110  3.9   2.88  17.0     0     1     4     4        17.8
 3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1        17.2
 4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1        17.8
 5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2        18.7
 6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1        17.8
 7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4        18.7
 8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2        17.2
 9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2        17.2
10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4        17.8
# … with 22 more rows, and abbreviated variable name ¹​qsec_control
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading