R语言如何将晚于2005-06-12的日期统一重编码为2005-06-12
R语言日期字段阈值截断处理
直接通过逐元素对比取值的方式,就能快速完成“晚于指定阈值的日期统一替换为阈值”的需求,不需要加载额外第三方包。
原始示例数据
data <- data.frame(review_date = as.Date(c("2006-04-11","2001-01-01", "2005-06-12", "2007-07-09")))
实现代码
方法1:pmin函数(推荐,写法最简洁)
pmin()会对向量每个位置的元素并行对比取最小值,天然适合这类上截断场景,不会丢失日期类型属性:
# 先定义阈值日期 cutoff <- as.Date("2005-06-12") # 直接执行替换 data$review_date <- pmin(data$review_date, cutoff)
方法2:ifelse条件判断
如果更习惯条件判断写法也可以用这个方案:
cutoff <- as.Date("2005-06-12") data$review_date <- as.Date( ifelse(data$review_date > cutoff, cutoff, data$review_date), origin = "1970-01-01" )
注意:R中
ifelse()会自动丢弃输入对象的自定义类属性,直接返回数值型的日期内部存储值,所以必须在外层套as.Date()指定日期原点,才能得到正确的Date类型结果。
处理结果
两种方法执行后效果完全一致,最终review_date字段值如下:
- 原值
2006-04-11→ 替换为2005-06-12 - 原值
2001-01-01→ 保留原值 - 原值
2005-06-12→ 保留原值 - 原值
2007-07-09→ 替换为2005-06-12
内容的提问来源于stack exchange,提问作者Irma
相关产品推荐
相关产品推荐

