首页 > 解决方案 > 按条件分组的时间序列的月平均数据

问题描述

下面是我的数据的样子。

日期,城市,成本 一月,纽约,2 月 1000 日,纽约,3 月 1500 日,纽约,4 月 1200 日,纽约,5 月 900 日,纽约,6 月 1100 日,纽约,1 月 1500 日,伦敦,2000 年 2 月,伦敦, 2400 Mar,伦敦,1700 Apr,伦敦,1900 May,伦敦,1900 六月,伦敦,1000

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

因此,结果将是

日期,城市,成本 一月,纽约,1000,二月 0%,纽约,1500,三月 50%,纽约,1200,-20% 四月,纽约,900,-25% 五月,纽约,1100, 23% 6 月,纽约,1500 年,36% 1 月,伦敦,2000 年,0% 2 月,伦敦,2400 年,20% 3 月,伦敦,1200 年,-50% 4 月,伦敦,1200 年,0% 5 月,伦敦,1900 年, 56% 6 月,伦敦,1900 年,0% 7 月,伦敦,1000 年,-44%

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

标签: r

解决方案


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

推荐阅读