Excel计算跨天时长显示1/1/1900,导入R后超24小时值为NA如何解决?
解决跨天时长Excel转R后显示NA的问题
Excel端预处理(关键步骤)
Excel里的跨天时长本质是日期数值(1代表24小时),所以会显示成1/1/1900 6:13:00 AM这类格式。要保留37:30:35的文本格式,按以下操作:
- 用公式把数值型时长转成纯文本:假设原时长在A列,在空白列输入
=TEXT(A1, "[h]:mm:ss"),下拉填充,得到的就是37:30:35这样的文本字符串。 - 复制公式生成的结果,右键选择「选择性粘贴」→「数值」,把这列转成纯文本格式,替换原时长列或者单独保留。
R端导入与处理
- 导入数据时,强制指定
ride_length列为字符型,避免R自动解析成日期时间导致NA:library(readxl) df <- read_excel("你的文件路径.xlsx", col_types = list(ride_length = "text")) - 如果需要对时长做计算,用
lubridate包转成可运算的时长对象:
转换后得到的是Duration类型,显示为library(lubridate) df$ride_length_duration <- hms(df$ride_length)37H 30M 35S,支持加减、统计等运算。
问题根源
Excel中,<24小时的时长是小数(比如12小时=0.5),跨天时长是整数+小数(比如30小时=1+0.25),R默认会把这类数值尝试解析为日期时间,但小数部分无法对应合法日期,混合后就会出现大量NA。通过转成文本再导入,就能完美保留原始时长格式。
内容的提问来源于stack exchange,提问作者faraz shoaib
相关产品推荐
相关产品推荐

