У меня есть данные в длинном формате, подобном этому:
library(tidyverse)
df <- data.frame(
projection1 = c(2,4,3),
projection2 = c(3,1,4),
historical_data = c(2,3,4),
time = c(1,2,3)
) %>%
as_tibble() %>%
gather(key = key, value = val, projection1:historical_data) %>%
mutate(key = key %>% factor())
Затем данные выглядят так:
# A tibble: 9 x 3
time key val
<dbl> <fct> <dbl>
1 1 projection1 2
2 2 projection1 4
3 3 projection1 3
4 1 projection2 3
5 2 projection2 1
6 3 projection2 4
7 1 historical_data 2
8 2 historical_data 3
9 3 historical_data 4
Теперь я хотел бы рассчитать относительную разницу каждый годзначения из projection1 и projection2 относительно исторического_данных. Таким образом, я хотел бы, чтобы мои данные заканчивались следующим образом:
# A tibble: 9 x 4
time key val pct_diff
<dbl> <fct> <dbl> <dbl>
1 1 projection1 2 1
2 2 projection1 4 1.33
3 3 projection1 3 0.75
4 1 projection2 3 1.5
5 2 projection2 1 0.333
6 3 projection2 4 1
7 1 historical_data 2 1
8 2 historical_data 3 1
9 3 historical_data 4 1
Я всегда заканчиваю разделением и слиянием, чтобы получить новые, казалось бы, избыточные столбцы, содержащие значения, которые уже находятся в текущем dataframe
/ tibble
сделать расчеты. Мне было интересно, если есть элегантное dplyr
или, возможно, data.table решение для этого? Или, возможно, вы сможете задать мне вопрос, на который уже дан ответ. Сам не сталкивался.
Спасибо