R验证环境下:日期比较保留缺失值记录的简洁筛选方法(无dplyr等包)
基础R中日期比较保留NA记录的简洁写法
在只能用基础R、不能用dplyr/data.table这类未验证包的场景下,你可以试试以下几种无需自定义函数的简洁方案:
方案1:用ifelse将NA替换为极大日期值
R的日期类型支持与Inf(无限大)比较,把缺失的quitdt替换成Inf后,所有scandt自然都小于它,就能自动保留这些记录:
subset(val, scandt < ifelse(is.na(quitdt), Inf, quitdt))
运行后就能得到目标结果:
subj scandt quitdt 1 a 2020-01-01 2020-05-01 3 b 2020-10-01 <NA>
如果有多个日期条件需要和quitdt比较,只需提前处理一次quitdt即可,避免重复写判断:
# 示例:同时满足scandt < quitdt和otherdt < quitdt,或quitdt为NA qdt <- ifelse(is.na(val$quitdt), Inf, val$quitdt) subset(val, scandt < qdt & otherdt < qdt)
方案2:调整逻辑判断顺序提升可读性
把NA判断放在前面,逻辑上更直观,写法也比嵌套括号简洁:
subset(val, is.na(quitdt) | scandt < quitdt)
内容的提问来源于stack exchange,提问作者AdamO
相关产品推荐
相关产品推荐

