【问题标题】:Find month from week numbers using lubridate使用 lubridate 从周数中查找月份
【发布时间】:2014-01-31 16:23:28
【问题描述】:

我有这个日期列表:

library(lubridate)
my.dates = ymd(c("2013-12-14", "2014-01-18", "2014-01-27", "2013-12-13", "2013-12-29", "2013-12-06"))

当我将这些日期转换为周数时,以下lubridate::weekfunctions 会输出一个数字向量:

week(my.dates)
[1] 50  3  4 50 52 49

我可以让lubridate 输出将my.dates 转换为周数和年数的日期(“POSIXct”“POSIXt”)对象。所以输出应该是一个日期对象(不是字符或数字向量),格式如下:

[1] "50-2013" "3-2014"   "4-2014"   "50-2013" "52-2013" "49-2013"

我对使用 lubridate 的解决方案特别感兴趣。

【问题讨论】:

  • 如果不知道每个星期的年份,我认为您无法稳健地做到这一点。更不用说,几周可以跨越月末/月初。你为什么要这样做?你在某个地方有没有其他信息的第 #s 周?
  • 我同意 BrodieG 的观点。如果没有更多信息,您无法将周数更改为月数。但是,如果适合您的目的,您可以直接将原始日期更改为月份。
  • 请查看考虑到您的 cmets 的已编辑问题
  • 您的示例输出(最后一个“代码”块)看起来像周月,而不是周年。你要哪个?
  • 抱歉需要周年。问题已编辑

标签: r date lubridate


【解决方案1】:

要将my.dates 转换为一周年字符向量,请尝试以下操作,其中week 和year 是润滑函数:

> paste(week(my.dates), year(my.dates), sep = "-")
[1] "50-2013" "3-2014"  "4-2014"  "50-2013" "52-2013" "49-2013"

问题中的示例输出未在一周使用前导零,但如果需要在一周使用前导零,则:

> sprintf("%02d-%d", week(my.dates), year(my.dates))
[1] "50-2013" "03-2014" "04-2014" "50-2013" "52-2013" "49-2013"

以上是周-年的字符表示,不能唯一标识日期,这种格式也不能表示 POSIXt 对象。

【讨论】:

    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多