我正在尝试通过将我的每月总数除以该月的平均季节性比率来反季节化我的数据。我有两个数据框。 avgseasonality具有12行每月的平均季节性比。问题在于,季节性比率是平均每个月的比率只有12行,而订单总数数据框有147行。
deseasonlize <- transform(avgseasonalityratio, deseasonlizedtotal =
df1$OrderTotal / avgseasonality$seasonalityratio)
这会运行,但是不能正确配对月份。它使用四月的第一比值,并运行它在12月的第一的OrderTotal。
> avgseasonality
Month seasonalityratio
1 April 1.0132557
2 August 1.0054602
3 December 0.8316988
4 February 0.9813396
5 January 0.8357475
6 July 1.1181648
7 June 1.0439899
8 March 1.1772450
9 May 1.0430667
10 November 0.9841149
11 October 0.9595041
12 September 0.8312318
> df1
# A tibble: 157 x 3
DateEntLabel OrderTotal `d$Month`
<dttm> <dbl> <chr>
1 2005-12-01 00:00:00 512758. December
2 2006-01-01 00:00:00 227449. January
3 2006-02-01 00:00:00 155652. February
4 2006-03-01 00:00:00 172923. March
5 2006-04-01 00:00:00 183854. April
6 2006-05-01 00:00:00 239689. May
7 2006-06-01 00:00:00 237638. June
8 2006-07-01 00:00:00 538688. July
9 2006-08-01 00:00:00 197673. August
10 2006-09-01 00:00:00 144534. September
# ... with 147 more rows
我分别需要每个月的订单总数和比率。计算将各月分别是如(十二月)512758 / 0.8316988 = 616518.864762输出用于计算将是在新的列,与月份和对应的OrderTotal。请任何帮助,万分感谢!
答案 0 :(得分:0)
最简单的方法是先merge()
个数据,然后再执行操作。您可以使用R base merge()
函数,尽管在这里我将使用tidyverse
left_join()
函数进行演示。我发现您的一列中有一个奇怪的名称d$Month
,将其重命名为Month将简化合并!
可复制的示例:
library(tidyverse)
df_1 <- data.frame(Month = c("Jan", "Feb"), seasonalityratio = c(1,2))
df_2 <- data.frame(Month = rep(c("Jan", "Feb"),each=2), OrderTotal = 1:4)
df_1 %>%
left_join(df_2, by = "Month") %>%
mutate(eseasonlizedtotal = OrderTotal / seasonalityratio)
#> Month seasonalityratio OrderTotal eseasonlizedtotal
#> 1 Jan 1 1 1.0
#> 2 Jan 1 2 2.0
#> 3 Feb 2 3 1.5
#> 4 Feb 2 4 2.0
由reprex package(v0.2.1)于2019-01-30创建