计算数据框行间差值时mr列全为NA的问题排查
问题原因与解决方案
错误原因
你代码里的rowwise()是导致mr列全为NA的核心问题:
rowwise()会让后续的mutate进入逐行处理模式,此时lag(y)无法在列的全局范围内获取前一行的y值,只能返回NA。- 计算
y = days_between^0.2777是逐元素的标量运算,完全不需要rowwise(),这个函数在这里属于多余操作,反而破坏了序列逻辑。
修正后的代码
直接移除rowwise()即可:
tDF <- tDF %>% mutate(days_between = as.numeric(difftime(lubridate::ymd(`Rare event date`), lubridate::ymd(lag(`Rare event date`)), units = 'days'))) %>% mutate(y = days_between^0.2777) %>% mutate(mr = abs(y - lag(y)))
效果验证
移除rowwise()后,lag(y)会正常在y列的全局序列中取前一行的值,假设第2行y为1.47、第3行y为1.64,第3行的mr就会计算为abs(1.64 - 1.47) = 0.17,符合你的预期。
内容的提问来源于stack exchange,提问作者psych0groov3
相关产品推荐
相关产品推荐

