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

如何在R中合并电子表格的12小时制时间与AM/PM列并转为POSIXt对象

解决12小时制时间转24小时制POSIXct对象的问题

你的代码失效主要有三个原因:

  • unite函数默认用下划线连接列,导致合并后的字符串格式是日/月/年 时:分_AM,不符合时间解析的标准格式
  • as.POSIXct的格式参数写错了,没有匹配12小时制+AM/PM的格式规则
  • 存在语法错误:%>%没写全、变量名不匹配、括号未闭合

修正后的完整代码

首先构造示例数据(和你的样本一致):

library(tidyverse)

# 构造示例数据
Timesheet <- tibble(
  Timesheet = c("8/10/2022 9:00", "8/10/2022 9:01", "8/10/2022 5:00"),
  `AM-PM` = c("AM", "AM", "PM")
)

然后执行合并和转换:

# 合并列并转换为POSIXct对象
Timesheet_processed <- Timesheet %>%
  # 用空格连接日期时间与AM/PM列,生成标准12小时制字符串
  unite("timestamp_12h", c(Timesheet, `AM-PM`), sep = " ", na.rm = FALSE) %>%
  # 解析为POSIXct,格式匹配日/月/年 + 12小时制时间 + AM/PM
  mutate(timestamp_posix = as.POSIXct(timestamp_12h, format = "%d/%m/%Y %I:%M %p"))

关键参数说明

  • unite的sep = " ":必须用空格分隔两列,得到8/10/2022 9:00 AM这种标准格式,才能被as.POSIXct识别
  • as.POSIXct的格式字符串:
    • %d/%m/%Y:对应你的日/月/年日期格式
    • %I:%M:代表12小时制的小时和分钟(注意是大写的I,不是小写l)
    • %p:用于识别AM/PM标识,R会自动将其转换为24小时制时间

验证结果

运行代码后查看处理后的数据:

print(Timesheet_processed)

输出如下,下午5点已转换为24小时制的17:00,且timestamp_posix是标准的POSIXct类型:

# A tibble: 3 × 2
  timestamp_12h       timestamp_posix
  <chr>               <dttm>         
1 8/10/2022 9:00 AM   2022-10-08 09:00:00
2 8/10/2022 9:01 AM   2022-10-08 09:01:00
3 8/10/2022 5:00 PM   2022-10-08 17:00:00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:05:14