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

如何将RequisitionHistory2中因子型时间列拆分为日期和时间列并转datetime?

解决方法:拆分并转换日期时间列

首先咱们来拆解下你遇到的问题:

  • 你误把整个数据框RequisitionHistory2传给了as.POSIXct(),但这个函数需要的是单个列向量(也就是你的RequisitionDateTime列),这是报错的核心原因。
  • 你的格式字符串也存在错误:"%m/%d/%. %H:%M %p"里的%.是无效写法,应该用%Y匹配年份;另外你的时间是24小时制(比如14:16),完全不需要%p(这个参数是用来识别AM/PM标识的)。

下面给你两种可行的解决方案,都能完美实现拆分日期和时间的需求:

方法1:用dplyr + 基础R函数实现

library(dplyr)

RequisitionHistory2 <- RequisitionHistory2 %>%
  # 先将因子型列转为字符,再转换为标准POSIXct格式
  mutate(RequisitionDateTime = as.POSIXct(as.character(RequisitionDateTime), 
                                          format = "%m/%d/%Y %H:%M")) %>%
  # 拆分出日期列和时间列
  mutate(RequisitionDate = as.Date(RequisitionDateTime),
         # 若需要字符型时间,用strftime;若想保留时间格式,用format也可以
         RequisitionTime = strftime(RequisitionDateTime, format = "%H:%M"))

方法2:用lubridate包简化操作(更推荐)

lubridate对日期时间的处理非常智能,能自动识别多数常用格式:

library(dplyr)
library(lubridate)

RequisitionHistory2 <- RequisitionHistory2 %>%
  # 快速将因子型日期时间转为标准datetime类型
  mutate(RequisitionDateTime = mdy_hm(as.character(RequisitionDateTime))) %>%
  # 拆分日期和时间
  mutate(RequisitionDate = date(RequisitionDateTime),
         # 生成专用的时间类型列,若要字符型仍可用strftime
         RequisitionTime = hms::hms(second(RequisitionDateTime), 
                                    minute(RequisitionDateTime), 
                                    hour(RequisitionDateTime)))

额外提示

  • 因为你的RequisitionDateTime是因子型,必须先转成字符型再做日期转换,否则容易出现数值匹配错误。
  • 如果转换后仍有问题,可以先检查RequisitionDateTime列的所有值是否都符合%m/%d/%Y %H:%M的格式,排查是否存在异常值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:50:29