使用 as.Date 格式化月份缩写 [重复]

Posted

技术标签:

【中文标题】使用 as.Date 格式化月份缩写 [重复]【英文标题】:Formatting month abbreviations using as.Date [duplicate] 【发布时间】:2012-11-03 09:04:32 【问题描述】:

我正在处理月度数据,并且有一个日期字符向量,格式如下:

Sep/2012
Aug/2012
Jul/2012

等等,回到 1981 年。我尝试过使用

as.Date(dates, "%b/%Y")

其中%b 表示月份缩写,但这仅返回 NA。我做错了什么?

注意:我已经找到了一种解决方法,使用 gsub() 在每个条目前添加“01/”,如下所示:

01/Sep/2012
01/Aug/2012
01/Jul/2012

然后as.Dates() 有效,但这似乎有点不雅,而且无论如何也不完全准确。

【问题讨论】:

从技术上讲,月份和年份不指定日期,这就是发生这种情况的原因。我相信 zoo 包有一些功能可以处理没有天数的月度数据。 好点,并为未来着想 - 我认为 zoo 包正是我所需要的。 【参考方案1】:

您正在 zoo 包中寻找as.yearmon()。鉴于您的日期

dates <- c("Sep/2012","Aug/2012","Jul/2012")

我们加载包并转换为"yearmon"

require(zoo)
dates1 <- as.yearmon(dates, format = "%b/%Y")
dates1

这给了

R> dates1
[1] "Sep 2012" "Aug 2012" "Jul 2012"

您可以使用as.Date() 方法强制转换为"Date" 类的对象

R> as.Date(dates1)
[1] "2012-09-01" "2012-08-01" "2012-07-01"

通过gsub() 获取您所做的事情会更简单。有一个 frac 参数控制一天组件应该在一个月中的距离:

R> as.Date(dates1, frac = 0.5)
[1] "2012-09-15" "2012-08-16" "2012-07-16"

但这对你来说可能还不够。

如果您真的只希望保存日期,那么它们并不是真正的日期,但如果您乐于在 zoo 包中工作,则可以使用 "yearmon" 类作为时间序列的zoo 对象的索引。

【讨论】:

非常好的答案,感谢您详细介绍。 精彩的回答!!在使用 zoo 和 tsibble 更改为 lubridate 不再接受作为 3 个字母月份来切换格式的 yearmon 后,我一直在苦苦挣扎。这很简单。谢谢

以上是关于使用 as.Date 格式化月份缩写 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

过滤特定月份的日期列

在 PySpark 中使用 to_date 在荷兰语中转换具有不同格式和月份缩写的日期字符串

R语言日期格式符号as.Date函数字符串数据转换为日期数据格式as.Date函数将dataframe的字符串(character)数据列转换为日期(date)格式数据列

如何使用月份和年份格式以精确格式显示日期[重复]

C# 日期时间格式化

NSDateFormatter 无法解析德语月份 March/June/Jul 的三个字母缩写