如何在R中将Excel导入的mm:ss.0时间戳转秒并设首行为0
Excel时间转秒并归一化首行为0的R解决方案
问题背景
Excel中某列时间显示为00:15.3格式,编辑栏显示为12:00:05 am,通过read_excel读入R后,该列变成带1899-12-31的POSIXct日期时间值,但原始数据不含日期信息,需要将其转换为秒数并将首行有效时间设为0秒。
针对已读入的dtf数据处理步骤
直接基于你提供的dtf数据,执行以下代码即可完成转换:
# 定义Excel时间对应的基准日期(1899-12-31是Excel时间系统的默认起始日期偏移) base_date <- as.POSIXct("1899-12-31 00:00:00", tz = "UTC") # 计算原始时间对应的秒数:POSIXct数值与基准日期数值的差 dtf$raw_seconds <- as.numeric(dtf$...1) - as.numeric(base_date) # 提取首行有效时间的秒数作为偏移量,让首行时间归一化为0 offset <- dtf$raw_seconds[!is.na(dtf$raw_seconds)][1] dtf$adjusted_seconds <- dtf$raw_seconds - offset # 查看转换结果 print(dtf[, c("...1", "raw_seconds", "adjusted_seconds")])
运行后输出结果:
...1 raw_seconds adjusted_seconds 1 <NA> NA NA 2 1899-12-31 00:00:05 5.4 0.0 3 1899-12-31 00:00:14 14.3 8.9
提前预防:读入Excel时直接处理
如果后续需要重新读入Excel文件,建议在read_excel中指定列类型为数值,跳过日期转换,直接基于Excel的原始时间数值计算秒数(Excel中1代表一整天,即86400秒):
library(readxl) # 读入时将时间列设为数值类型,其他列按需设置 df <- read_excel("你的文件路径.xlsx", col_types = c("numeric", rep("numeric", 8))) # 计算原始秒数:Excel数值 × 86400(一天的秒数) df$raw_seconds <- df[[1]] * 86400 # 归一化首行为0 offset <- df$raw_seconds[!is.na(df$raw_seconds)][1] df$adjusted_seconds <- df$raw_seconds - offset
内容的提问来源于stack exchange,提问作者user22354047
相关产品推荐
相关产品推荐

