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

在R语言中拆分日期时间列为单独的日期列和时间列

R语言拆分「Date and Time」列为Date和Time列的解决方案

问题分析

你之前的代码失败主要有两个原因:

  • 错误引用了Time列(原列名为「Date and Time」)
  • 没有先将完整的日期时间字符串解析为标准时间对象,直接拆分时间部分导致格式不匹配

下面提供两种适合入门者的实现方法,均会保留原「Date and Time」列,同时生成目标的Date和Time列。

准备示例数据

先构造和你数据结构一致的测试数据,方便验证:

data <- data.frame(
  `Date and Time` = c(
    "10/28/2023 11:00:00 PM",
    "9/22/2023 11:47:00 AM",
    "9/22/2023 11:47:00 AM",
    "8/24/2023 11:58:00 AM"
  ),
  stringsAsFactors = FALSE
)

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

借助dplyr和lubridate包,语法更直观,适合数据处理场景:

# 先加载所需包(如果未安装,先运行 install.packages(c("dplyr", "lubridate")))
library(dplyr)
library(lubridate)

data_processed <- data %>%
  # 解析完整日期时间字符串为标准时间对象
  mutate(datetime = mdy_hms(`Date and Time`)) %>%
  # 提取日期部分,生成Date列(Date类型,支持日期筛选)
  mutate(Date = as.Date(datetime)) %>%
  # 提取12小时制带AM/PM的时间字符串,生成Time列
  mutate(Time = format(datetime, "%I:%M:%S %p"))

如果不需要中间的datetime列,可以添加select(-datetime)删除它;若需要做时间间隔运算,建议保留datetime列(它是可运算的POSIXct类型)。

方法二:基础R实现(无需额外安装包)

用基础R函数完成,适合不想安装额外包的场景:

# 解析完整日期时间字符串为POSIXlt时间对象
data$datetime <- strptime(data$`Date and Time`, format = "%m/%d/%Y %I:%M:%S %p")

# 提取日期部分生成Date列
data$Date <- as.Date(data$datetime)

# 提取12小时制带AM/PM的时间字符串生成Time列
data$Time <- format(data$datetime, "%I:%M:%S %p")

# 可选:删除中间的datetime列
# data$datetime <- NULL

关键说明

  • 两种方法均会保留原「Date and Time」列,不会修改原始数据
  • Date列是Date类型,支持直接按日期范围筛选(如filter(data_processed, Date >= as.Date("2023-09-01")))
  • 若要进行时间间隔运算,建议使用保留的datetime列(POSIX类型),字符型的Time列无法直接做算术操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:05:26