如何用R将酒店预订DataFrame按年份和月份拆分?
按年份/月份批量拆分酒店预订数据的R代码
步骤1:准备工作(安装并加载包)
首次运行需安装读取谷歌表格和数据处理的工具包,之后直接加载即可:
# 首次运行安装包 install.packages(c("googlesheets4", "tidyverse")) # 加载包 library(googlesheets4) library(tidyverse)
步骤2:读取数据
读取你提供的酒店预订数据:
df <- read_sheet("17ebOpYgAxA8EqECkZZT4F5blHF7gYCDKAPgLM5ZWHpk")
步骤3:拆分成年份独立DataFrame列表
用原生split()函数按年份列(假设数据中年份列名为arrival_date_year)一次性拆分,得到一个列表,每个元素对应一个年份的完整数据:
# 按年份拆分 year_dfs <- split(df, df$arrival_date_year)
- 访问方式:比如查看2015年的数据,直接用
year_dfs$2015``(年份为字符串格式,需加反引号)
步骤4:进一步拆分为年份下的月度DataFrame
用purrr::map()批量处理每个年份的DataFrame,再按月份拆分,得到「年份→月份」的嵌套列表:
# 嵌套拆分:年份分组下再拆分为月度 year_month_dfs <- map(year_dfs, ~split(.x, .x$arrival_date_month))
- 访问方式:比如查看2015年1月的数据,用
year_month_dfs$2015$January
步骤5:直接生成全局环境中的独立DataFrame(可选)
如果想把每个年月的数据框直接放到全局环境,方便直接调用(比如df_2015_January),可以用assign()批量生成:
# 批量创建以「年份-月份」命名的独立DataFrame walk2(names(year_dfs), year_dfs, function(year, data) { # 拆分当前年份的月度数据 month_dfs <- split(data, data$arrival_date_month) # 逐个存入全局环境 walk2(names(month_dfs), month_dfs, function(month, df_month) { df_name <- paste0("df_", year, "_", month) assign(df_name, df_month, envir = .GlobalEnv) }) })
补充:如果没有现成的年月列
如果数据只有完整日期列(比如arrival_date),先用lubridate包提取年月:
library(lubridate) # 转换日期格式(假设日期列是字符型) df$arrival_date <- as.Date(df$arrival_date) # 提取年份和月份名称 df$arrival_date_year <- year(df$arrival_date) df$arrival_date_month <- month(df$arrival_date, label = TRUE) # 生成Jan/Feb这类格式的月份名
内容的提问来源于stack exchange,提问作者user19587849
相关产品推荐
相关产品推荐

