R语言同一列日期天数差计算结果全为0,求问题排查方案
问题排查与解决
你的代码逻辑本身没问题,但结果全0可能由以下几种原因导致:
相邻日期本身就是同一天:
即便newdate是Date类型,若排序后相邻行的日期完全一致,newdate - lag(newdate)的结果自然为0天。你可以先输出排序后的日期与滞后日期验证:historical_sonia %>% arrange(newdate) %>% mutate(prev_date = lag(newdate)) %>% select(newdate, prev_date) %>% head(10)若
newdate和prev_date的相邻值均相同,说明数据本身无日期间隔,差为0是正常结果。存在未取消的分组(group_by):
如果historical_sonia此前执行过group_by()但未用ungroup()取消分组,arrange()和lag()都会在每个分组内执行。若分组内所有行日期一致,就会出现全0的情况。解决方法是在arrange()前添加取消分组的操作:historical_sonia <- historical_sonia %>% ungroup() %>% # 取消分组 arrange(newdate) %>% mutate(n = as.numeric(newdate - lag(newdate)))日期列存在隐藏的时间信息(少见):
你可以再次用str(historical_sonia$newdate)确认列类型,确保是Date而非POSIXct/POSIXlt(带时分秒的时间类型)——若原本是后者,转换为Date时可能被统一截断到同一天。
另外,你也可以手动计算前两行的日期差验证数据:
as.numeric(historical_sonia$newdate[2] - historical_sonia$newdate[1])
若结果为0,说明数据本身无日期间隔;若结果不为0,则问题出在分组或排序环节。
内容的提问来源于stack exchange,提问作者user12959781
相关产品推荐
相关产品推荐

