如何为缺失年份的日期向量分配正确年份:已过设明年,未过设今年
为缺失年份的日期向量分配年份
需求规则:
- 若日期在当前年份已过,分配明年年份
- 若日期在当前年份尚未到来,分配今年年份
示例数据
datevec <- c("March 15 2:00 PM","January 7 3:00 PM","November 4 9:00 AM", "August 5 10:00AM", "February 6 10:00PM","December 5 6:00 AM")
基于提问日期2023年9月6日,期望输出年份:
desired_years <- c("2024","2024","2023","2024","2024","2023")
实现方法(R语言)
方法1:使用lubridate包(简洁直观)
lubridate包提供了更友好的日期时间处理函数,步骤如下:
- 加载包并定义当前日期
library(lubridate) current_date <- as.Date("2023-09-06")
- 解析输入字符串为带临时年份的日期时间对象
先给所有日期临时分配当前年份,方便后续比较:
parsed_dates <- mdy_hms(datevec, year = year(current_date))
- 根据日期前后关系分配年份
比较解析后的日期与当前日期,若早于当前日期则分配明年年份,否则保留今年:
assigned_years <- ifelse(parsed_dates < current_date, year(current_date) + 1, year(current_date)) assigned_years_str <- as.character(assigned_years)
运行后得到的assigned_years_str与期望结果完全一致。
方法2:基础R实现(无需额外包)
如果不想依赖第三方包,可以用基础R的日期处理函数:
current_date <- as.Date("2023-09-06") current_year <- format(current_date, "%Y") # 拼接当前年份与输入日期字符串,解析为日期时间对象 parsed_dates <- as.POSIXct(paste(current_year, datevec), format = "%Y %B %d %I:%M %p") # 判断并分配年份 assigned_years <- ifelse(parsed_dates < current_date, as.integer(current_year) + 1, as.integer(current_year)) assigned_years_str <- as.character(assigned_years)
内容的提问来源于stack exchange,提问作者Neal Barsch
相关产品推荐
相关产品推荐

