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

基于R语言统计酒店任意日期在住人数的实现方法咨询

实现方案

第一步:数据预处理

首先需要将字符类型的日期转换为Date格式,同时处理未退房用户的记录,由于我们统计的是2010年1月的在住人数,将未退房用户的退房日期暂设为2010年1月31日即可:

library(dplyr)

# 转换日期格式,处理未退房记录
hotel <- hotel %>%
  mutate(
    check_in_date = as.Date(check_in_date),
    check_out_date = as.Date(ifelse(check_out_date == "still in hotel as of today", "2010-01-31", check_out_date))
  )

# 生成1月完整日期序列
day_df <- data.frame(date = seq(as.Date("2010-01-01"), as.Date("2010-01-31"), by = "day"))

第二步:计算每日在住人数(两种方案可选)

方案1:基于你现有逻辑的增量统计法

你之前统计每日入住、退房人次的思路可以通过累加增量实现:

# 统计每日入住人次
check_ins <- hotel %>% 
  group_by(date = check_in_date) %>% 
  summarise(check_in_num = n())

# 统计每日退房人次
check_outs <- hotel %>% 
  group_by(date = check_out_date) %>% 
  summarise(check_out_num = n())

# 合并日期与出入住统计,计算在住人数
daily_stats <- day_df %>%
  left_join(check_ins, by = "date") %>%
  left_join(check_outs, by = "date") %>%
  # 空值替换为0
  mutate(across(c(check_in_num, check_out_num), ~ifelse(is.na(.), 0, .))) %>%
  # 累加每日增量得到当日在住人数
  mutate(occupancy = cumsum(check_in_num - check_out_num))

# 提取最终需要的日期、在住人数结果
result <- daily_stats %>% select(date, occupancy)

方案2:逐天匹配法(逻辑更简单,适合小数据量)

直接逐天统计满足「入住日期≤当天且退房日期≥当天」的用户数:

daily_occupancy <- day_df %>%
  rowwise() %>%
  mutate(
    occupancy = sum(hotel$check_in_date <= date & hotel$check_out_date >= date)
  )

结果示例

输出的result数据框格式如下(仅展示前10条):

dateoccupancy
2010-01-012
2010-01-023
2010-01-033
2010-01-042
2010-01-052
2010-01-062
2010-01-071
2010-01-083
2010-01-092
2010-01-102

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:18:03