将总计分配给日期范围内的正确月份

Assigning total to correct month from date range

我有一个包含以下格式的预订数据的数据集:

property   <- c('casa1', 'casa2', 'casa3')
check_in   <- as.Date(c('2018-01-01', '2018-01-30','2018-02-28'))
check_out  <- as.Date(c('2018-01-02', '2018-02-03', '2018-03-02'))
total_paid <- c(100,110,120)

df <- data.frame(property,check_in,check_out, total_paid)

我的目标是将每月 total_paid 金额除以天数,并出于预算原因正确分配给每个月。
虽然 casa1 没有问题,但 casa2casa3 两个月都有预留天数,因此总数会因为这个问题而出现偏差。

非常感谢任何帮助!

给你:

library(dplyr)
library(tidyr)
df %>% 
  mutate(id = seq_along(property), # make few variable to help
         day_paid = total_paid / as.numeric(check_out - check_in),
         date = check_in) %>% 
  group_by(id) %>% 
  complete(date = seq.Date(check_in, (check_out - 1), by = "day")) %>% # get date for each day of stay (except last)
  ungroup() %>% # make one row per day of stay
  mutate(month = cut(date, breaks = "month")) %>% # determine month of date
  fill(property, check_in, check_out, total_paid, day_paid) %>% 
  group_by(id, month) %>% 
  summarise(property = unique(property),
            check_in = unique(check_in),
            check_out = unique(check_out),
            total_paid = unique(total_paid),
            paid_month = sum(day_paid)) # summarise per month

结果:

# A tibble: 5 x 7
# Groups:   id [3]
     id month      property check_in   check_out  total_paid paid_month
  <int> <fct>      <fct>    <date>     <date>          <dbl>      <dbl>
1     1 2018-01-01 casa1    2018-01-01 2018-01-02        100        100
2     2 2018-01-01 casa2    2018-01-30 2018-02-03        110         55
3     2 2018-02-01 casa2    2018-01-30 2018-02-03        110         55
4     3 2018-02-01 casa3    2018-02-28 2018-03-02        120         60
5     3 2018-03-01 casa3    2018-02-28 2018-03-02        120         60

我希望它具有一定的可读性,但请问我是否需要解释一下。惯例是人们不支付住宿的最后一天费用,所以我考虑到了这一点。