在R语言中从字符串提取混合日期并转换为as.Date格式
提取字符向量中的日期并转换为Date格式
问题说明
现有如下字符向量,需要从中提取日期部分并转换为as.Date格式,注意字符串末尾的数字是评论数,不属于日期内容。示例中第一行的日期最终需呈现为09-11-2021格式。
示例数据:
example.data <- c("By Leigh-Ann Butler, Shannon Cobb, Michael R. DonaldsonNov 9, 20213 Comments", "By Leigh-Ann Butler, Shannon Cobb, Michael R. DonaldsonNov 8, 20212 Comments", "By Rick AndersonNov 4, 202114 Comments", "By Victoria Ficarra, Rob JohnsonNov 3, 20215 Comments")
解决方案
方法1:基础R实现
- 提取日期字符串:用正则匹配英文月份缩写+日+年的固定格式,捕获目标日期片段:
# 提取日期字符串 date_strings <- regmatches(example.data, regexpr("[A-Z][a-z]{2} \\d{1,2}, \\d{4}", example.data))
- 转换为Date对象:指定匹配格式
%b %d, %Y(对应Nov 9, 2021这类格式):
date_objects <- as.Date(date_strings, format = "%b %d, %Y")
- 调整为日-月-年显示格式(按需执行):
formatted_dates <- format(date_objects, "%d-%m-%Y")
方法2:stringr包简化操作
如果已安装stringr包,可通过链式调用缩短代码:
library(stringr) # 提取并转换为Date对象 date_objects <- str_extract(example.data, "[A-Z][a-z]{2} \\d{1,2}, \\d{4}") %>% as.Date(format = "%b %d, %Y") # 格式化输出 formatted_dates <- format(date_objects, "%d-%m-%Y")
结果验证
运行代码后,formatted_dates将输出:
[1] "09-11-2021" "08-11-2021" "04-11-2021" "03-11-2021"
内容的提问来源于stack exchange,提问作者I_like_insights
相关产品推荐
相关产品推荐

