在R语言中将%B-%d-%Y-%I:%M-%p格式的字符型日期转换为%Y%m%d格式的方法咨询
没问题,我来帮你搞定这个日期转换的需求!
解决方案
首先确认一下,执行完removeWords后,你的my_date会变成类似"December 02, 2017 07:33PM"的格式(注意年份和时间之间有两个空格)。接下来我们可以通过解析字符为日期对象→格式化目标格式两步完成转换,这里提供两种实用方法:
方法一:基础R工具(无需额外安装包)
基础R的strptime()可以把字符型日期解析成标准日期时间对象,再用strftime()输出你需要的%Y%m%d格式:
# 先执行你已有的处理步骤 my_date = c("December 02, 2017 at 07:33PM") library(tm) stopwords = c("at") my_date = removeWords(my_date, stopwords) # 解析为日期时间对象,用%*忽略年份和时间之间的任意空格 date_obj <- strptime(my_date, format = "%B %d, %Y %*%I:%M%p") # 格式化为目标的%Y%m%d格式 formatted_date <- strftime(date_obj, format = "%Y%m%d") print(formatted_date) # 输出结果:"20171202"
小说明:
%B:匹配英文月份全称(比如December)%d:匹配两位数字的日期%Y:匹配四位数字的年份%*:自动忽略任意数量的空格(避免因移除"at"后产生的多空格导致匹配失败)%I:匹配12小时制的两位小时数%M:匹配两位数字的分钟数%p:匹配AM/PM标识
方法二:用lubridate包(更简洁直观)
如果你经常处理日期时间,lubridate包的语法会更省心,不需要死记复杂的格式符:
# 先安装并加载lubridate(首次使用需安装) # install.packages("lubridate") library(lubridate) # 执行你已有的处理步骤 my_date = c("December 02, 2017 at 07:33PM") library(tm) stopwords = c("at") my_date = removeWords(my_date, stopwords) # 自动识别格式并解析为日期时间对象 date_obj <- mdy_hm(my_date, tz = "UTC") # 格式化为目标格式 formatted_date <- format(date_obj, "%Y%m%d") print(formatted_date) # 输出结果:"20171202"
小说明:
mdy_hm():代表字符串格式是月(全称)-日-年-小时-分钟,lubridate会自动处理空格和标点tz = "UTC":指定时区避免本地时区干扰,你也可以换成自己需要的时区(比如"Asia/Shanghai")
额外小贴士
如果移除"at"后字符串的空格数量不稳定,可以先执行my_date <- gsub("\\s+", " ", my_date)把多余空格替换成单个空格,再进行解析,这样格式匹配会更稳妥。
内容的提问来源于stack exchange,提问作者shmeconomics
相关产品推荐
相关产品推荐

