在R中将无AM/PM标识的时间序列转换为24小时时间格式
R语言时间格式转换解决方案
由于你的数据已经按时间顺序排列,24条记录刚好对应全天24个小时,推荐直接生成标准时间序列赋值,操作最简单且不会出错:
方法1:基于序列生成(推荐)
# 安装加载lubridate包,处理时间更便捷 # install.packages("lubridate") library(lubridate) # 生成2021-08-11 00:00:00开始的24小时连续时间序列,直接赋值给timestamp列 df$timestamp <- seq(ymd_hms("2021-08-11 00:00:00"), by = "hour", length.out = 24) # 若需要保留字符串格式,添加以下行即可 df$timestamp <- as.character(df$timestamp)
方法2:基于原始时间值调整
如果你的数据量更大、不满足刚好24条的场景,可以按规则调整小时值:
library(lubridate) library(dplyr) # 先将字符串转为时间格式 df$timestamp <- ymd_hms(df$timestamp) df <- df %>% mutate( # 每12条记录为一组,第一组对应0-11点,第二组对应12-23点 group = (row_number() - 1) %/% 12, origin_hour = hour(timestamp), new_hour = case_when( # 第一组的12点转为0点,其余小时不变 group == 0 & origin_hour == 12 ~ 0, # 第二组所有小时加12,转为下午/夜间的24小时制时间 group == 1 ~ origin_hour + 12, TRUE ~ origin_hour ), # 更新时间的小时部分 timestamp = update(timestamp, hour = new_hour) ) %>% # 删除中间计算的临时列 select(-group, -origin_hour, -new_hour) # 转字符串可选 df$timestamp <- as.character(df$timestamp)
两种方法运行后得到的结果都和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Avijit Mallick
相关产品推荐
相关产品推荐

