如何将月度期末DataFrame转换为%Y-%m格式并支持动态更新?
解决方案
要将Month_End列转换为%Y-%m格式,同时支持动态处理数据更新,可以使用dplyr和lubridate包实现,步骤如下:
1. 加载依赖包
library(dplyr) library(lubridate)
2. 数据处理代码
# 处理日期转换 df_processed <- df %>% # 标记并提取财年信息 mutate(fiscal_year = ifelse(grepl("^\\d{4}-\\d{2}$", Month_End), Month_End, NA)) %>% # 向下填充财年,让每个月份对应所属财年 fill(fiscal_year, .direction = "down") %>% # 过滤掉仅显示财年的行(无实际数据) filter(!grepl("^\\d{4}-\\d{2}$", Month_End)) %>% # 拆分财年为起始和结束年份 separate(fiscal_year, into = c("start_year", "end_year"), sep = "-", convert = TRUE) %>% # 匹配月份对应的实际年份(财年为4月至次年3月) mutate( year = case_when( Month_End %in% c("Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") ~ start_year, Month_End %in% c("Jan", "Feb", "Mar") ~ end_year ), # 转换为日期并格式化为%Y-%m Month_End = format(ymd(paste(year, Month_End, "01")), "%Y-%m") ) %>% # 清理临时列 select(-start_year, -end_year, -year)
代码说明
- 财年识别与填充:通过正则匹配识别财年行,用
fill将财年信息传递给下方所有月份行,确保每个月份都能关联到所属财年。 - 年份匹配:根据财年规则(4月至次年3月),将
Apr-Dec映射到财年起始年,Jan-Mar映射到财年结束年;若你的财年规则不同,只需修改case_when中的月份分组即可。 - 动态适配:只要数据保持「财年行+对应月份行」的结构,新增数据后重复运行代码即可自动处理,无需手动调整。
内容的提问来源于stack exchange,提问作者alec22
相关产品推荐
相关产品推荐

