Среднемесячное значение данных для временного ряда в группе по условию - PullRequest
0 голосов
/ 29 апреля 2018

Ниже приведены мои данные.

Дата, Город, Стоимость Ян, Нью-Йорк, 1000 Февраль, Нью-Йорк, 1500 Мар, Нью-Йорк, 1200 Апр, Нью-Йорк, 900 Май, Нью-Йорк, 1100 Июнь, Нью-Йорк, 1500 Январь, Лондон, 2000 Фев, Лондон, 2400 Мар, Лондон, 1700 Апрель, Лондон, 1900 Май, Лондон, 1900 Июнь, Лондон, 1000

Я хочу рассчитать следующие вещи: 1. Изменение стоимости% за последние 3 месяца и последние 6 месяцев 2. Месяц за месяцем% Изменение стоимости для каждой группы.

Следовательно, результат будет как

Дата, Город, Стоимость Ян, Нью-Йорк, 1000, 0% Февраль, Нью-Йорк, 1500, 50% Мар, Нью-Йорк, 1200, -20% Апр, Нью-Йорк, 900, -25% Май, Нью-Йорк, 1100, 23% Июнь, Нью-Йорк, 1500, 36% Январь, Лондон, 2000, 0% Фев, Лондон, 2400, 20% Мар, Лондон, 1200, -50% Апрель, лондон, 1200, 0% Май, Лондон, 1900 г., 56% Июнь, Лондон, 1900 год, 0% Июль, Лондон, 1000, -44%

и

Город, изменение за последние 3 месяца, изменение за последние 6 месяцев, Нью-Йорк, -44% (1000-1900) / 1900, 58% (1000-2400) / 2400 Лондон и так далее ...

1 Ответ

0 голосов
/ 29 апреля 2018

Примечание: по поводу пункта 1: я не уверен, что вы после: 3 месяца, 6 месяцев по сравнению с чем? По поводу пункта 2: я не могу воспроизвести ваш ожидаемый результат. Пожалуйста, перепроверьте свои номера.

Я предполагаю, что вы хотите рассчитать процентное изменение в Cost относительно предыдущего значения. Вы можете сделать следующее, используя dplyr::lag:

library(tidyverse);
df %>%
    group_by(City) %>%
    mutate(perc_change = (Cost - lag(Cost)) / lag(Cost) * 100)
## A tibble: 12 x 4
## Groups:   City [2]
#   Date  City         Cost perc_change
#   <fct> <fct>       <int>       <dbl>
# 1 Jan   " New York"  1000        NA
# 2 Feb   " New York"  1500        50.0
# 3 Mar   " New York"  1200       -20.0
# 4 Apr   " New York"   900       -25.0
# 5 May   " New York"  1100        22.2
# 6 June  " New York"  1500        36.4
# 7 Jan   " London"    2000        NA
# 8 Feb   " London"    2400        20.0
# 9 Mar   " London"    1700       -29.2
#10 Apr   " London"    1900        11.8
#11 May   " London"    1900         0.
#12 June  " London"    1000       -47.4

Пример данных

df <- read.csv(text  =
    "Date, City , Cost
Jan, New York, 1000
Feb, New York, 1500
Mar, New York, 1200
Apr, New York, 900
May, New York, 1100
June, New York, 1500
Jan, London, 2000
Feb, London, 2400
Mar, London, 1700
Apr, London, 1900
May, London, 1900
June, London, 1000", header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...