从因子型时间向量提取小时时触发as.POSIXlt.numeric错误
解决时间提取小时时的
Error in as.POSIXlt.numeric(...)问题 嘿,我来帮你搞定这个报错!从你的描述来看,你尝试用hour(hms(as.character(...)))提取时间的小时部分,但触发了as.POSIXlt.numeric相关的错误,大概率是这两个原因导致的:
- 你的
Heure.Inscription向量是因子(factor)类型,直接转字符后可能还残留因子属性问题,或者里面混入了不符合HH:MM:SS格式的无效值 hms()函数无法解析某些异常值,导致返回非时间对象,传给hour()时就触发了类型不匹配的错误
下面给你分步解决的方案:
第一步:检查向量类型与无效值
先确认你的时间向量类型,以及有没有异常值:
# 查看向量类型 class(DataCRMSanoflore$Heure.Inscription) # 找出不符合HH:MM:SS格式的记录 invalid_entries <- DataCRMSanoflore[!grepl("^\\d{2}:\\d{2}:\\d{2}$", DataCRMSanoflore$Heure.Inscription), ] print(invalid_entries)
如果输出里有异常值(比如空字符串、非时间格式的文本),先处理这些值(比如替换成NA或者修正格式)。
第二步:修正代码提取小时
方法1:用hms包正确解析(推荐)
如果你的向量是因子类型,先彻底转成字符型,再用hms解析:
# 确保时间列是字符型(如果是因子的话) DataCRMSanoflore$Heure.Inscription <- as.character(DataCRMSanoflore$Heure.Inscription) # 提取小时部分 DataCRMSanoflore$HOURS_INSCR <- hour(hms(DataCRMSanoflore$Heure.Inscription))
方法2:用基础R拆分字符串(更稳妥,适合格式统一的情况)
如果不想依赖hms包,直接拆分时间字符串取小时:
# 按冒号拆分字符串,取第一个元素(小时部分) DataCRMSanoflore$HOURS_INSCR <- sapply(strsplit(DataCRMSanoflore$Heure.Inscription, ":"), function(x) x[1]) # 可选:转成数值型方便后续分析 DataCRMSanoflore$HOURS_INSCR <- as.numeric(DataCRMSanoflore$HOURS_INSCR)
为什么原来的代码会报错?
当hms()遇到无法解析的字符串时,会返回NA或者非POSIXlt类型的对象,这时hour()函数尝试把这些非时间对象转成POSIXlt时,就会触发Error in as.POSIXlt.numeric(...)的错误——因为它只能处理合法的时间对象。
内容的提问来源于stack exchange,提问作者Rprogrammer
相关产品推荐
相关产品推荐

