以下是我的数据的样子。
日期,城市,成本 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 伦敦,等等...
答案 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)