【问题标题】:Rounding month end data using weekly split in R使用 R 中的每周拆分对月末数据进行舍入
【发布时间】:2020-10-14 04:18:27
【问题描述】:

输入表:

   Date             Qty
2017-01-01          234
2017-01-08          123
2017-01-15          445
2017-01-22          113
2017-01-29          674
2018-02-05          120
2018-02-12          921
2018-02-19          732
2018-02-26          634
2018-03-05          711

预期表:

   Date             Qty
2017-01-01          234
2017-01-08          123
2017-01-15          445
2017-01-22          113
2017-01-29          708.28  #674+(120/7 * 2)
2018-02-05          85.71   #(120/7 * 5)
2018-02-12          921
2018-02-19          732  
2018-02-26          837.14  #634+(711/7 * 2)
2018-03-05          507.85  #(711/7 * 5)

在上面的 o/p 表中,属于新月份的first date的数量预计会使用每周比例。

例如:

2017-02-26 的数量为 634,2018-03-05 的数量为 711 因此,数量 711 除以 7(一周中的#days)即 711/7 = 101.571 并且 2 月份通常有 28 天,因此 2 股(#days 留在 2 月,因为该行的当前日期是 2017 101.571 的 -02-26) 被添加到 2017-02-26 的现有数量中,从而使其成为 634+(101.571*2) => 634+203.14 => 837.14(如您在预期表中所见)。同样,剩余的 2 股从 2018-03-05 中扣除,现在仍然保留 5 股(本月第一周的#days,因为该行的当前日期是 2018-03-05)即 711/5 => 507.85(您可以在预期的表格中观察到)。

使用 R 我应该如何概括这种情况?

【问题讨论】:

  • 那么您需要在一个月的最后一周完成这一行吗?
  • 是的,对于该月剩余的天数,其余部分的比例转到该月第一周的行。
  • 例子说明了一切。

标签: r date


【解决方案1】:

这样回答吗:

> library(dplyr)
> first_day_of_month_wday <- function(dx) {
+   day(dx) <- 1
+   wday(dx)
+ }
> fil <- ceiling((day(df$Date) + first_day_of_month_wday(df$Date) - 1) / 7)
> 
> df %>% mutate(Qty1 = case_when(fil > 4 ~ Qty + (days_in_month(df$Date) - day(Date)) * lead(Qty)/7, TRUE ~ Qty)) %>% 
+                           mutate(Qty1 = case_when(lag(fil) > 4 ~ Qty/7  * day(Date), TRUE ~ Qty1)) %>% select(-Qty) %>% rename(Qty = Qty1)
# A tibble: 10 x 2
   Date         Qty
   <date>     <dbl>
 1 2017-01-01 234  
 2 2017-01-08 123  
 3 2017-01-15 445  
 4 2017-01-22 113  
 5 2017-01-29 708. 
 6 2018-02-05  85.7
 7 2018-02-12 921  
 8 2018-02-19 732  
 9 2018-02-26 837. 
10 2018-03-05 508. 
> 

PS:使用了R: How to get the Week number of the month中的first_day_of_month_wday函数。

【讨论】:

    猜你喜欢
    • 2018-03-16
    • 2015-08-12
    • 1970-01-01
    • 2021-09-14
    • 2013-05-02
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多