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

R语言:将字符型datetime列拆分为日期列与hms格式时间列

字符型日期时间拆分:Date列 + HMS时间列解决方案

针对你的chr类型日期列start_at(格式为dd/mm/yyyy HH:MM),以下是可靠的拆分方法,同时满足start_date为Date格式、start_Time为hms格式(自动补00秒)的要求:

基础R实现

1. 日期列优化

你之前的日期处理可以简化,无需嵌套format,直接指定格式转换即可:

# 修正:统一变量名为start_at(注意你代码里有笔误写成started_at)
november$start_date <- as.Date(november$start_at, format = "%d/%m/%Y")

2. 时间列处理

核心是先正确解析完整的日期时间字符串为POSIXct对象,再提取时间转成hms格式:

# 加载hms包(若未安装先运行install.packages("hms"))
library(hms)

# 解析完整日期时间,指定正确格式
datetime_full <- as.POSIXct(november$start_at, format = "%d/%m/%Y %H:%M")
# 提取时间并转为hms格式,自动补00秒
november$start_Time <- hms(format(datetime_full, "%H:%M:%S"))

Tidyverse + Lubridate 简洁方案

用lubridate的解析函数更高效,适合批量处理:

# 安装依赖包(首次运行)
install.packages(c("tidyverse", "lubridate", "hms"))

library(tidyverse)
library(lubridate)
library(hms)

november <- november %>%
  mutate(
    # 解析为datetime对象(dmy_hm对应dd/mm/yyyy HH:MM格式)
    datetime = dmy_hm(start_at),
    # 提取日期列
    start_date = as.Date(datetime),
    # 提取时间并转为hms格式
    start_Time = as_hms(datetime)
  ) %>%
  # 可选:移除中间生成的datetime列
  select(-datetime)

验证结果

运行以下代码检查格式是否符合要求:

# 检查日期列
str(november$start_date)
# 输出示例:Date[1:337735], format: "2022-11-01" "2022-11-01" ...

# 检查时间列
str(november$start_Time)
# 输出示例:'hms' num 00:00:00 00:00:00 00:01:00 06:43:00 ...
# - attr(*, "units")= chr "secs"

原代码出错原因

  1. as.POSIXct(november$started_at)未指定format参数,R默认解析规则无法识别你的dd/mm/yyyy HH:MM格式,导致时间解析失败,返回全00:00:00
  2. parse_date_time(november$started_at,"dmy")仅指定了日期解析规则(dmy),未包含时间部分(hm),无法解析带时间的字符串,因此返回全NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:10:29