【问题标题】:as.Date() Giving wrong output from Day of Year calculationas.Date() 从一年中的一天计算中给出错误的输出
【发布时间】:2019-10-09 15:15:24
【问题描述】:

我正在尝试使用使用年份 (DOY) 的数据集并想要计算日期:

将 DOY 格式转换为我使用的日期:

as.Date(DOY, origin = "%Y-01-01")

但我似乎遇到了问题。例如:DOY = 121 代表2003

as.Date(121, origin = "2003-01-01")
[1] "2003-05-02"

这应该是:"2003-05-01"(参见此处:https://asd.gsfc.nasa.gov/Craig.Markwardt/doy2003.html

代码适用于闰年:

as.Date(121, origin = "2004-01-01")
[1] "2004-05-01"

(并在此处正确显示:https://asd.gsfc.nasa.gov/Craig.Markwardt/doy2004.html

2005 的问题仍然存在。

我在这里遗漏了一些明显的东西还是缺少闰年的代码有问题?

【问题讨论】:

  • as.Date 是计算起点之后的天数,所以as.Date(1, origin = "2003-01-01") 等于起点+1 天或1 月2 日。对于您的计算,您需要使用 12 月 31 日作为原点。仅供参考,请仔细检查您对上述 2004 年日期的计算。
  • @Dave2e:谢谢,这行得通:as.Date(121, origin = "2002-12-31"),给出:"2003-05-01";然而as.Date(121, origin = "2003-12-31"),给出:"2004-04-30"。如我的帖子:as.Date(121, origin = "2004-01-01"),给出:"2004-05-01"。这似乎不一致(或者我误解了逻辑)。
  • 2004 年是闰年
  • 是一致的。 2004 年的第 121 天是 4 月 30 日,而不是 5 月 1 日。仔细检查上面的链接。
  • @Dave2e:是的,我的错。道歉。

标签: r as.date


【解决方案1】:

as.Date will accept numeric data (the number of days since an epoch), but only if origin is supplied.

https://www.rdocumentation.org/packages/base/versions/3.6.1/topics/as.Date

因此,如果您将整数转换为日期,则该整数将计算自原点以来过去的天数,这意味着日期将是之后 > 最后一天过去了

另一种方法是使用儒略日期

as.Date('2005-121', '%Y-%j')

会产生

[1] "2005-05-01"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多