You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:用readxl导入Excel日期时间列并合并计算时长

解决readxl导入日期+时间并合并的问题

嘿,别担心,新手第一次发帖遇到这种问题太正常啦!折腾了好几个小时确实头大,我来帮你把这个日期时间合并的事儿捋清楚~

第一步:正确导入日期和时间列

有时候R自动推断列类型会出问题,比如把日期当成字符,或者时间识别不准,所以我们可以手动指定导入类型,避免后续麻烦:

方法1:用col_types整体指定

如果知道日期列和时间列的位置,比如第1列是日期,第2到第5列是时间,可以这样写:

library(readxl)
# 假设你的文件叫data.xlsx,第1列是日期,2-5列是时间
df <- read_excel("data.xlsx", col_types = c("date", rep("time", 4)))

方法2:用cols精准指定列(更推荐)

如果知道列名,直接指定对应列的类型,格式也可以明确写出来,避免识别错误:

df <- read_excel("data.xlsx", 
                 cols = list(
                   日期列名 = col_date(format = "dd/mm/yyyy"),
                   时间列1 = col_time(format = "hh:mm"),
                   时间列2 = col_time(format = "hh:mm")
                 ))

注意:把上面的日期列名、时间列1换成你实际的列名就行

第二步:合并日期和时间列

readxl导入的日期是Date类型(只包含日期,默认当天0点),时间是hms类型(属于时长类对象),我们可以把它们合并成POSIXct类型的完整日期时间:

先加载需要的包

library(hms)  # 处理时间类型的必备包
library(dplyr) # 用管道操作更顺手,不用也可以

合并操作(两种方式选一种)

方式1:用dplyr的管道语法

df <- df %>%
  mutate(
    # 合并日期和第一个时间列
    datetime1 = as.POSIXct(日期列名) + as.duration(时间列1),
    # 合并日期和第二个时间列
    datetime2 = as.POSIXct(日期列名) + as.duration(时间列2)
  )

方式2:基础R语法

df$datetime1 <- as.POSIXct(df$日期列名) + as.duration(df$时间列1)
df$datetime2 <- as.POSIXct(df$日期列名) + as.duration(df$时间列2)

特殊情况处理:如果导入后日期/时间是字符类型

如果自动推断没做好,日期或时间变成了字符,先转成正确类型再合并:

# 把字符日期转成Date类型
df$日期列名 <- as.Date(df$日期列名, format = "dd/mm/yyyy")

# 把字符时间转成hms类型
df$时间列1 <- hms::as_hms(df$时间列1)

验证和后续使用

合并后的datetime1、datetime2是带完整时间的日期对象,你可以直接做时长计算,比如:

# 计算两个时间的间隔
df$时长 <- df$datetime2 - df$datetime1

得到的时长是difftime类型,可以直接查看小时、分钟等单位~


内容的提问来源于stack exchange,提问作者pedal999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:50:39