Быстрый вопрос о расчете изменения во времени для аккуратных данных. Нужно ли распространять данные, видоизменять переменную и затем снова собирать данные (см. Ниже), или есть более быстрый способ сделать это, сохраняя данные аккуратными.
Вот пример:
df <- data.frame(country = c(1, 1, 2, 2),
year = c(1999, 2000, 1999, 2000),
value = c(20, 30, 40, 50))
df
country year value
1 1 1999 20
2 1 2000 30
3 2 1999 40
4 2 2000 50
Чтобы рассчитать изменение стоимости между 1999 и 2000 годом, я бы:
library(dplyr)
library(tidyr)
df2 <- df %>%
spread(year, value) %>%
mutate(change.99.00 = `2000` - `1999`) %>%
gather(year, value, c(`1999`, `2000`))
df2
country change.99.00 year value
1 1 10 1999 20
2 2 10 1999 40
3 1 10 2000 30
4 2 10 2000 50
Это кажется трудоемким способом сделать это. Я предполагаю, что должен быть аккуратный способ сделать это, сохраняя данные в узком, аккуратном формате, сгруппировав данные или что-то еще, но я не могу об этом думать и не могу найти ответ в Интернете.
Есть ли более простой способ сделать это?