R语言中带AM/PM的字符型转日期时间并拆分列问题
R语言拆分字符型日期时间为日期和时间列
方法一:使用tidyverse工具链(推荐)
步骤1:构造示例数据
# 模拟原数据框 df <- data.frame( ID = c(1, 2, 3), work_type = c("A", "B", "A"), date = c("1/3/2023 6:16am", "1/3/2023 6:20am", "1/4/2023 6:18am"), stringsAsFactors = FALSE )
步骤2:解析并拆分日期时间
借助lubridate解析字符型日期时间,再提取日期和时间部分:
library(dplyr) library(lubridate) df_processed <- df %>% # 匹配"月/日/年 时:分am/pm"格式,转为日期时间类型 mutate(datetime = mdy_hm(date)) %>% # 提取日期和时间,保持原显示格式 mutate( date = format(datetime, "%#m/%#d/%Y"), # Windows系统用%#,Linux/macOS用%_ time = format(datetime, "%I:%M%p") %>% tolower() ) %>% # 调整列顺序并移除临时datetime列 select(ID, work_type, date, time) print(df_processed)
运行结果:
ID work_type date time 1 1 A 1/3/2023 6:16am 2 2 B 1/3/2023 6:20am 3 3 A 1/4/2023 6:18am
方法二:使用基础R(无需额外包)
直接按空格拆分字符串,快速得到目标格式:
# 按空格拆分日期时间字符串 split_cols <- strsplit(df$date, " ") df$date_new <- sapply(split_cols, `[`, 1) df$time_new <- sapply(split_cols, `[`, 2) # 可选:将日期转为Date类型(方便后续日期运算) df$date_new <- as.Date(df$date_new, format = "%m/%d/%Y") # 调整列结构 df_processed_base <- df %>% select(ID, work_type, date = date_new, time = time_new) print(df_processed_base)
注意事项
- 如果原数据存在格式变体(比如
1/3/23或01/03/2023 06:16 AM),需要对应调整mdy_hm或as.Date的格式参数。 - 若需后续进行日期时间计算,建议保留解析后的
datetime列,不要仅保留字符型的日期和时间。
内容的提问来源于stack exchange,提问作者Gary-c
相关产品推荐
相关产品推荐

