R语言使用difftime计算就诊间隔天数出现POSIXct转换错误如何解决
R语言difftime计算就诊间隔报错解决方案
报错内容
restwan_data %>% select("PCode", "VisitDate") %>% na.omit() %
%group_by("PCode") %>% as.double(difftime(now, VisitDate, units = c("days")))
Error in as.POSIXct.default(time1) :
do not know how to convert 'time1' to class “POSIXct”
错误原因
- 管道逻辑错误:dplyr管道会将前一步输出的整个数据框作为下一个函数的第一个参数,你的原代码相当于直接把数据框传给
as.double()的第一个入参,difftime()的计算结果变成了as.double()的第二个入参,类型不匹配触发报错。 - 分组语法错误:
group_by()中传入列名不需要加引号,加引号会被识别为字符串常量,无法正确按患者编号分组。 - 缺少列生成函数:没有用
mutate()/summarise()这类生成新列的函数,直接对数据框调用数值转换函数不符合语法规则。 - 额外说明:
now()是lubridate包的函数,如果你没有加载对应包,可以用R原生的Sys.time()代替,不需要额外加载依赖。
注意事项
你提供的数据集结构里存在重复的PCode列,运行代码前可以先清理冗余列避免冲突:
`restwan_data <- restwan_data[, c("PCode", "VisitDate")]
修复代码
场景1:计算每条就诊记录距离当前时间的天数
library(dplyr) restwan_data %>% select(PCode, VisitDate) %>% na.omit() %>% group_by(PCode) %>% mutate(days_from_now = as.double(difftime(Sys.time(), VisitDate, units = "days")))
场景2:计算同一患者相邻两次就诊的间隔天数
restwan_data %>% select(PCode, VisitDate) %>% na.omit() %>% group_by(PCode) %>% arrange(VisitDate) %>% # 先按就诊日期升序排序 mutate(visit_interval_days = as.double(difftime(VisitDate, lag(VisitDate), units = "days")))
场景3:计算每个患者最后一次就诊距离当前时间的天数
restwan_data %>% select(PCode, VisitDate) %>% na.omit() %>% group_by(PCode) %>% summarise(days_from_last_visit = as.double(difftime(Sys.time(), max(VisitDate), units = "days"))
内容的提问来源于stack exchange,提问作者Victor Ogbolu
相关产品推荐
相关产品推荐

