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

将AllData数据集started_at列转为日期格式并提取日/月/小时字段

解决方案

先看你的数据集预览:

ride_id          rideable_type started_at      ended_at        member…¹
  <chr>            <chr>         <chr>           <chr>           <chr>   
1 C2F7DD78E82EC875 electric_bike 1/13/2022 11:59 1/13/2022 12:02 casual  
2 A6CF8980A652D272 electric_bike 1/10/2022 8:41  1/10/2022 8:46  casual  
3 BD0F91DFF741C66D classic_bike  1/25/2022 4:53  1/25/2022 4:58  member  
4 CBB80ED419105406 classic_bike  1/4/2022 0:18   1/4/2022 0:33   casual  
5 DDC963BFDDA51EEA classic_bike  1/20/2022 1:31  1/20/2022 1:37  member  
6 A39C6F6CC0586C0B classic_bike  1/11/2022 18:48 1/11/2022 18:51 member

你用as.Date()失败的原因有两个:一是started_at包含日期+时间,as.Date()默认只处理日期部分;二是你的日期格式是月/日/年 时:分,不是as.Date()默认的年-月-日格式,必须指定解析规则。

下面提供两种常用解决方法:

方法一:Base R 实现

  1. 转换为日期时间格式:用as.POSIXct()指定格式字符串"%m/%d/%Y %H:%M"
  2. 提取日、月、小时:用format()函数提取对应字段
# 转换started_at为日期时间格式
AllData$started_at <- as.POSIXct(AllData$started_at, format = "%m/%d/%Y %H:%M")

# 新增列提取日、月、小时
AllData$start_day <- format(AllData$started_at, "%d")
AllData$start_month <- format(AllData$started_at, "%m")
AllData$start_hour <- format(AllData$started_at, "%H")

方法二:Tidyverse + Lubridate 实现(更简洁)

Lubridate包专门处理日期时间,无需手动写格式字符串,可直接识别月/日/年 时:分格式:

library(tidyverse)
library(lubridate)

AllData <- AllData %>%
  # 解析started_at为日期时间格式
  mutate(started_at = mdy_hm(started_at),
         # 提取日、月、小时
         start_day = day(started_at),
         start_month = month(started_at),
         start_hour = hour(started_at))

注:如果需要提取的日/月为数值格式(而非字符串),Base R方法可加as.numeric()转换,Lubridate的day()/month()函数默认返回数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:41:04