I have a df like this:
structure(list(Date = structure(c(18605, 18604, 18598, 18597,
18590, 18584, 18583, 18578, 18570, 18569, 18563, 18562, 18557,
18549, 18548, 18542, 18541, 18536, 18534, 18529, 18521, 18520,
18515, 18508, 18500, 18499, 18493, 18492, 18486, 18485, 18479,
18478, 18472, 18471, 18465, 18464, 18458, 18457, 18450, 18445,
18444, 18437, 18436, 18430, 18429, 18424, 18416, 18415, 18410,
18409, 18403, 18402, 18396, 18388, 18387, 18381, 18380, 18374,
18373, 18368, 18367, 18360, 18359, 18354, 18340, 18338, 18331,
18325, 18317, 18312, 18289, 18282, 18275, 18268), class = "Date"),
`Type 1` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, 0.3, NA, NA, NA, NA, 0.4, NA, NA,
NA, NA, 0.2, NA, NA, NA, NA, 0.7, NA, NA, NA, NA, NA, 0.5,
NA, NA, NA, NA, 0.3, NA, NA, NA, NA, NA, 0.4, NA, NA, NA,
0.3, NA, NA, NA, NA, NA, NA, NA, NA, 0.6, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA), `Type 2` = c(NA, NA, 0.1, NA,
NA, 0.1, NA, 0.2, NA, 0.2, 0.1, NA, 0.2, 0.2, NA, 0.1, NA,
NA, 0.1, NA, 0.2, NA, NA, 0.4, 0.2, NA, 0.3, NA, 0.2, NA,
0.3, NA, 0.6, NA, 0.4, NA, NA, 0.2, NA, 0.4, 0.6, NA, 0.3,
NA, 0.2, 0.7, NA, 0.1, 0.3, NA, 0.2, NA, NA, NA, 0.3, NA,
0.1, 0.3, NA, NA, 0.3, 0.2, NA, NA, NA, NA, 0.6, NA, 0.4,
NA, 0.2, NA, NA, 0.2), `Type 3` = c(NA, 0.3, NA, 0.3, 0.4,
NA, 0.2, NA, 0.3, NA, NA, 0.2, NA, NA, 0.2, NA, 0.2, NA,
NA, 0.1, NA, 0.2, NA, NA, NA, 0.3, NA, NA, NA, 0.4, NA, 0.3,
NA, 0.7, NA, 0.2, 0.5, 0.4, NA, 0.4, NA, 0.8, 0.4, NA, 0.2,
0.6, 0.3, 0.2, NA, NA, NA, 0.4, 0.4, NA, 0.2, 0.3, NA, 0.2,
0.3, 0.4, NA, 0.7, NA, NA, 1.4, NA, NA, 1.4, NA, 1, NA, NA,
0.3, NA), `Type 4` = c(NA, 0.4, NA, 0.1, 0.1, NA, 0.1, NA,
NA, 0.1, NA, 0.1, 0.2, NA, 0.2, NA, 0.2, 0.3, NA, NA, NA,
0.2, 0.3, 0.3, NA, NA, NA, 0.5, NA, 0.6, NA, 0.7, NA, NA,
NA, 1.2, 1, NA, 0.3, NA, 1.1, NA, NA, 0.4, NA, NA, NA, NA,
0.2, 0.2, NA, NA, 0.2, NA, NA, 0.1, NA, NA, NA, 0.2, 0.3,
NA, 0.2, 0.3, NA, 1.8, NA, NA, NA, NA, NA, 0.2, NA, NA)), row.names = c(NA,
-74L), class = c("tbl_df", "tbl", "data.frame"))
I'd like to be able to work out the deviation from the 'Type' average, and display it instead of the original data. So for example, the df currently shows 0.3 on 2020-10-01 for 'Type 1'. Instead of that, I would like it to show the deviation from the 'Type 1' average from across the dataset. Is this possible? Any help is appreciated.
CodePudding user response:
library(tidyverse)
df %>%
mutate(across(2:5, ~ mean(., na.rm = T) - .x ))
# A tibble: 74 × 5
Date `Type 1` `Type 2` `Type 3` `Type 4`
<date> <dbl> <dbl> <dbl> <dbl>
1 2020-12-09 NA NA NA NA
2 2020-12-08 NA NA 0.119 -0.00968
3 2020-12-02 NA 0.171 NA NA
4 2020-12-01 NA NA 0.119 0.290
5 2020-11-24 NA NA 0.0194 0.290
6 2020-11-18 NA 0.171 NA NA
7 2020-11-17 NA NA 0.219 0.290
8 2020-11-12 NA 0.0714 NA NA
9 2020-11-04 NA NA 0.119 NA
10 2020-11-03 NA 0.0714 NA 0.290
# … with 64 more rows
# ℹ Use `print(n = ...)` to see more rows