r - 按条件分组的时间序列的月平均数据
问题描述
下面是我的数据的样子。
日期,城市,成本 一月,纽约,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 伦敦,等等...
解决方案
注意:关于第 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)
推荐阅读
- c# - Asp .Net Core 是如何调用控制器动作的?
- scala - 使用 Async[F] 将 Future[A] 转换为 F[A]
- node.js - 使用预签名的 url 和 axios 将 MP3 文件上传到 aws s3 存储桶:Filesize 0b
- c++ - C ++异步从其他函数获取数据
- flutter - Flutter:检测小部件之间的状态转换
- azure - 如何在 azure devops 的 ansible playbook 扩展中传递动态主机 ip
- javascript - 为什么 Array Prototype 函数不能在每个其他数组函数中工作?
- flutter - 在flutter中获取URL响应的控制台登录Webview
- python-3.x - 谷歌语音 - googleapiclient.errors.UnknownApiNameOrVersion:名称:语音版本:v1beta1
- reactjs - 循环和更新变量而不是覆盖它,React Native