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

如何在R语言中为给定时间戳标记时段(上午、下午、晚上)

在R语言中为时间戳标记时段(上午/下午/晚上)

我来帮你搞定这个需求,下面是具体的实现步骤和代码:

第一步:准备初始数据

首先我们先把你的初始数据导入R中:

# 创建初始数据框
df <- data.frame(
  Id = c("3083188c", "924d500e", "ad4dd7ff"),
  Time_stamp = c("2016-08-29 13:10:51", "2016-08-29 09:22:33", "2016-08-25 20:29:35"),
  stringsAsFactors = FALSE
)

第二步:转换时间戳格式

首先需要把字符型的Time_stamp转换成R能识别的时间格式,这里推荐两种常用方法:

方法1:使用lubridate包(更便捷)

lubridate是R中专门处理时间的工具包,语法非常直观:

# 安装并加载lubridate包(首次使用需要安装)
# install.packages("lubridate")
library(lubridate)

# 转换时间格式为R可识别的datetime类型
df$Time_stamp <- ymd_hms(df$Time_stamp)

# 提取时间中的小时数,用于后续判断时段
df$hour <- hour(df$Time_stamp)

方法2:使用base R(无需额外安装包)

如果不想安装新包,用base R的原生函数也能实现:

# 转换时间格式并提取小时数
df$hour <- as.integer(format(strptime(df$Time_stamp, "%Y-%m-%d %H:%M:%S"), "%H"))

第三步:根据小时标记时段

按照你的示例逻辑,我们把时段划分为:

  • 上午:6:00 - 12:00
  • 下午:12:00 - 18:00
  • 晚上:18:00 - 次日6:00

这里提供两种实现方式:

方法1:使用dplyr的case_when(逻辑更清晰)

# 安装并加载dplyr包(首次使用需要安装)
# install.packages("dplyr")
library(dplyr)

df <- df %>%
  mutate(Time_of_day = case_when(
    hour >= 6 & hour < 12 ~ "上午",
    hour >= 12 & hour < 18 ~ "下午",
    TRUE ~ "晚上"  # 其余时段(0-6点、18-24点)统一归为晚上
  )) %>%
  select(-hour)  # 移除临时的hour列

方法2:使用base R的嵌套ifelse

# 嵌套ifelse判断时段
df$Time_of_day <- ifelse(df$hour >=6 & df$hour <12, "上午",
                         ifelse(df$hour >=12 & df$hour <18, "下午", "晚上"))

# 移除临时的hour列
df <- df[, !names(df) %in% "hour"]

最终结果

运行完上述代码后,你就能得到想要的结果:

print(df)
#          Id           Time_stamp Time_of_day
# 1 3083188c 2016-08-29 13:10:51         下午
# 2 924d500e 2016-08-29 09:22:33         上午
# 3 ad4dd7ff 2016-08-25 20:29:35         晚上

如果需要调整时段的划分规则,只需要修改判断条件里的小时区间就可以啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:31:16