如何在Excel或R中分离「4/13/2016 12:00:00 AM」这类日期时间数据?
分离「MM/DD/YYYY HH:MM:SS AM/PM」格式的日期与时间(Excel & R)
Excel 处理方法
方法1:公式提取
假设目标数据在单元格A1:
- 提取日期:使用
=INT(A1),之后将单元格格式设置为「日期」(可按需选择yyyy/mm/dd等格式) - 提取时间:使用
=MOD(A1,1),之后将单元格格式设置为「时间」(可选hh:mm:ss或带AM/PM的格式) - 若需直接提取文本格式的日期/时间,用TEXT函数:
- 日期:
=TEXT(A1,"yyyy/mm/dd") - 时间:
=TEXT(A1,"hh:mm:ss AM/PM")
- 日期:
方法2:分列工具
- 选中包含日期时间数据的列
- 点击「数据」选项卡 → 「分列」
- 向导第一步选择「分隔符号」,点击「下一步」
- 勾选「空格」作为分隔符,点击「下一步」
- 分别设置两列的数据格式(第一列设为「日期」,第二列设为「时间」),点击「完成」
R 处理方法
基础R实现
先将字符串转换为日期时间对象,再提取日期和时间:
# 示例数据 datetime_str <- c("4/13/2016 12:00:00 AM", "5/20/2017 3:45:00 PM") # 转换为POSIXct对象 datetime_obj <- as.POSIXct(datetime_str, format = "%m/%d/%Y %I:%M:%S %p") # 提取日期(可自定义格式,比如"%m/%d/%Y") date_col <- format(datetime_obj, "%Y-%m-%d") # 提取时间(12小时制带AM/PM用"%I:%M:%S %p",24小时制用"%H:%M:%S") time_col <- format(datetime_obj, "%I:%M:%S %p")
使用lubridate包(更简洁)
lubridate专门处理日期时间,解析和提取更直观:
library(lubridate) # 解析字符串为日期时间对象 datetime_obj <- mdy_hms(datetime_str) # 提取日期 date_col <- date(datetime_obj) # 提取时间(用hms包转换为纯时间格式) time_col <- hms::as_hms(datetime_obj)
如果是处理数据框,结合dplyr批量处理:
library(dplyr) library(lubridate) # 假设数据框为df,日期时间列名为datetime_str df <- df %>% mutate( datetime = mdy_hms(datetime_str), date = date(datetime), time = as_hms(datetime) )
内容的提问来源于stack exchange,提问作者ugonna chukwuemeka
相关产品推荐
相关产品推荐

