R使用dplyr的mutate计算日期与Sys.Date()间隔返回NA如何解决?
问题原因
你的代码返回全NA的核心问题是as.Date()的格式参数和实际日期字符串的格式不匹配:
你数据中date列的日期格式为月/日/年(例:10/7/2021对应2021年10月7日),但你指定的format="%Y-%m-%d"是「年-月-日」的格式,完全无法匹配,导致所有日期转换失败返回NA,最终差值计算结果也全为NA。
修复后的代码
只需把日期格式参数改为匹配你数据的%m/%d/%Y即可,同时Sys.Date()本身就是Date类型,无需重复转换:
library(dplyr) data %>% select(id, date) %>% mutate(days_since = Sys.Date() - as.Date(date, format = "%m/%d/%Y"))
如果你需要得到纯数值类型的天数而非difftime类型,可以在外层套as.integer():
mutate(days_since = as.integer(Sys.Date() - as.Date(date, format = "%m/%d/%Y")))
小提示:如果遇到日期转换全为NA的问题,可以先单独测试单个日期字符串的转换结果,确认格式参数是否正确,比如运行
as.Date("10/7/2021", format = "%m/%d/%Y")验证转换是否正常。
内容的提问来源于stack exchange,提问作者RL_Pug
相关产品推荐
相关产品推荐

