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

R语言中带AM/PM的字符型转日期时间并拆分列问题

R语言拆分字符型日期时间为日期和时间列

方法一:使用tidyverse工具链(推荐)

步骤1:构造示例数据

# 模拟原数据框
df <- data.frame(
  ID = c(1, 2, 3),
  work_type = c("A", "B", "A"),
  date = c("1/3/2023 6:16am", "1/3/2023 6:20am", "1/4/2023 6:18am"),
  stringsAsFactors = FALSE
)

步骤2:解析并拆分日期时间

借助lubridate解析字符型日期时间,再提取日期和时间部分:

library(dplyr)
library(lubridate)

df_processed <- df %>%
  # 匹配"月/日/年 时:分am/pm"格式,转为日期时间类型
  mutate(datetime = mdy_hm(date)) %>%
  # 提取日期和时间,保持原显示格式
  mutate(
    date = format(datetime, "%#m/%#d/%Y"),  # Windows系统用%#,Linux/macOS用%_
    time = format(datetime, "%I:%M%p") %>% tolower()
  ) %>%
  # 调整列顺序并移除临时datetime列
  select(ID, work_type, date, time)

print(df_processed)

运行结果:

ID work_type      date   time
1  1         A  1/3/2023 6:16am
2  2         B  1/3/2023 6:20am
3  3         A  1/4/2023 6:18am

方法二:使用基础R(无需额外包)

直接按空格拆分字符串,快速得到目标格式:

# 按空格拆分日期时间字符串
split_cols <- strsplit(df$date, " ")
df$date_new <- sapply(split_cols, `[`, 1)
df$time_new <- sapply(split_cols, `[`, 2)

# 可选:将日期转为Date类型(方便后续日期运算)
df$date_new <- as.Date(df$date_new, format = "%m/%d/%Y")

# 调整列结构
df_processed_base <- df %>%
  select(ID, work_type, date = date_new, time = time_new)

print(df_processed_base)

注意事项

  • 如果原数据存在格式变体(比如1/3/23或01/03/2023 06:16 AM),需要对应调整mdy_hm或as.Date的格式参数。
  • 若需后续进行日期时间计算,建议保留解析后的datetime列,不要仅保留字符型的日期和时间。

内容的提问来源于stack exchange,提问作者Gary-c

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:55:13