You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用difftime按ID计算行间日差出现不一致值的问题求助

解决data.table分组计算日期差时出现异常值的问题

问题根源

你遇到的异常值(比如示例中5r分组的-469),核心原因是在difftime函数里错误地使用了AllPat$Date,而不是直接引用分组上下文里的Date列。

当你用by = PatID进行分组操作时,shift(Date)是对当前分组内的日期列做移位,但AllPat$Date会直接引用整个数据集的日期列,两者的范围不匹配,就会出现错位计算,导致完全不符合预期的差值。

修正后的代码

把AllPat$Date改成直接用Date,让data.table在分组上下文里处理列:

setDT(AllPat)[, Tage := difftime(Date, shift(Date), units = "days"), by = PatID]

额外优化建议

为了确保计算的准确性,建议先按PatID和Date排序,保证每个分组内的日期是按时间顺序排列的,避免因为日期乱序导致的差值异常:

setDT(AllPat)[order(PatID, Date), Tage := difftime(Date, shift(Date), units = "days"), by = PatID]

为什么添加tz="GMT"没用?

你之前尝试的时区设置解决的是日期解析时的时区偏移问题,但你的问题本质是列引用范围错误,和时区无关,所以这个操作无法修复异常值。

内容的提问来源于stack exchange,提问作者AO_30

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:38:32