You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将R语言预订数据集中的总金额按日期范围分配至对应月份?

解决跨月预订金额拆分的R方案

没问题,我帮你搞定这个预算核算的难题!针对你这份跨月的预订数据,我们可以通过拆分每日记录再按月份聚合的方式,精准把total_paid分配到对应的月份里。下面是具体的实现步骤和代码:

步骤1:准备数据并计算基础指标

首先先把你提供的数据加载好,再计算每个预订的入住天数和单日单价:

# 加载你提供的数据集
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)

# 计算实际入住天数(退房日不算入住,所以用check_out - check_in)
df$stay_days <- as.integer(df$check_out - df$check_in)
# 计算单日单价
df$daily_rate <- df$total_paid / df$stay_days

步骤2:拆分预订为每日记录

我们用tidyverse工具链把每个预订拆成对应天数的每日记录,同时生成每天的入住日期:

library(tidyverse)

# 拆分出每日记录,并生成完整的入住日期序列
daily_bookings <- df %>%
  rowwise() %>%
  # 生成从check_in到check_out前一天的日期序列
  mutate(stay_date = list(seq(check_in, check_out - 1, by = "day"))) %>%
  unnest(stay_date) %>%
  ungroup()

这里用check_out - 1是因为退房当天通常不算入住天数,比如casa2的退房日是2018-02-03,实际入住到2018-02-02,刚好是4天(1月30、31日,2月1、2日)。

步骤3:按房源和月份聚合金额

最后提取每个日期的年份+月份,分组计算每个房源每个月的分配金额:

monthly_allocation <- daily_bookings %>%
  # 把日期格式化为"年-月"的形式
  mutate(year_month = format(stay_date, "%Y-%m")) %>%
  group_by(property, year_month) %>%
  # 计算每个月的总分配金额
  summarise(total_allocated = sum(daily_rate), .groups = "drop") %>%
  # 预算核算一般需要整数,这里做四舍五入处理
  mutate(total_allocated = round(total_allocated))

查看最终结果

运行完上面的代码后,monthly_allocation就是你要的按月份拆分的结果:

print(monthly_allocation)
# 输出结果:
# # A tibble: 5 × 3
#   property year_month total_allocated
#   <chr>    <chr>                <dbl>
# 1 casa1    2018-01                100
# 2 casa2    2018-01                 55
# 3 casa2    2018-02                 55
# 4 casa3    2018-02                 60
# 5 casa3    2018-03                 60

你看,casa2的110元按入住天数平分成了1月55元、2月55元;casa3的120元分成了2月60元、3月60元,完全符合预算核算的精准分配要求。如果你的数据量很大,这个方法也能高效处理,因为都是向量化操作~

内容的提问来源于stack exchange,提问作者praguetastic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:29:40