按条件分组的时间序列的每月平均数据

时间:2018-04-29 14:01:41

标签: r

以下是我的数据的样子。

日期,城市,成本 Jan,纽约,1000 2月,纽约,1500 Mar,纽约,1200 4月,纽约,900 五月,纽约,1100 六月,纽约,1500 Jan,伦敦,2000年 2月,伦敦,2400 Mar,伦敦,1700年 4月,伦敦,1900年 五月,伦敦,1900年 六月,伦敦,1000

我想计算以下内容: 1.%过去3个月和过去6个月的成本变化 2.逐个月%每个组的成本变化。

因此,结果将像

日期,城市,成本 Jan,纽约,1000,0% 2月,纽约,1500,50% 3月,纽约,1200,-20% 4月,纽约,900,-25% 五月,纽约,1100,23% 六月,纽约,1500,36% Jan,London,2000,0% 2月,伦敦,2400,20% Mar,伦敦,1200,-50% 4月,伦敦,1200,0% 五月,伦敦,1900,56% 六月,伦敦,1900,0% 7月,伦敦,1000,-44%

城市,最近3个月的变化,最近6个月的变化, 纽约,-44%(1000-1900)/ 1900,58%(1000-2400)/ 2400 伦敦,等等...

1 个答案:

答案 0 :(得分:0)

注意:关于第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)