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

在R语言中从HH:MM:SS格式时间数据提取小时列

从HH:MM:SS格式时间提取小时数的R解决方案

注意:你给出的示例向量写法a <- c(22:00:03, ...)在R中会报错,正确的时间向量需为字符类型,比如a <- c("22:00:03", "22:00:05", "22:00:07", "22:00:09")。

以下是几种高效提取小时数的方法,适配大规模数据集:

1. 基础R字符串截取(最快)

直接截取时间字符串前两位并转为整数,无需转换时间对象,效率最高:

a <- c("22:00:03", "22:00:05", "22:00:07", "22:00:09")
hour_col <- as.integer(substr(a, 1, 2))
# 输出:[1] 22 22 22 22

2. lubridate包实现(灵活通用)

用hms()解析HH:MM:SS格式,再通过hour()提取小时:

library(lubridate)

a <- c("22:00:03", "22:00:05", "22:00:07", "22:00:09")
time_obj <- hms(a)
hour_col <- hour(time_obj)
# 输出:[1] 22 22 22 22

这种方法的优势是,若后续需处理分钟、秒等其他时间维度,可直接复用time_obj。

3. data.table高效处理(超大规模数据集)

如果数据集达百万级以上,用data.table操作能显著提升速度:

library(data.table)

# 构造数据表
dt <- data.table(time = c("22:00:03", "22:00:05", "22:00:07", "22:00:09"))
# 新增小时列
dt[, hour := as.integer(substr(time, 1, 2))]
# 或者结合lubridate实现
dt[, hour := hour(hms(time))]

分组统计示例

提取小时列后,可按小时分组分析,比如用dplyr统计每小时观测数:

library(dplyr)

df <- data.frame(time = a)
df %>% 
  mutate(hour = as.integer(substr(time, 1, 2))) %>% 
  group_by(hour) %>% 
  summarise(obs_count = n())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:24:59