【问题标题】:Convert separate 'year' and 'day' columns into one 'date' column with lubridate?使用 lubridate 将单独的“年”和“日”列转换为一个“日期”列?
【发布时间】:2014-06-12 18:18:01
【问题描述】:

我有一列用于“年”,一列用于“日”(儒略日),我想使用这些列来制作“日期”(2002-12-03 或任何格式都可以)。我发现了很多关于分手日期的lubridate 文献,但我正在寻找如何将它们组合在一起。

听起来很简单:

year    day    
2008    1
2008    2
2008    3
2008    4

到

year    day    date
2008    1    2008-1-1
etc.

【问题讨论】:

  • 一个月你会做什么?
  • @iShouldUseAName 今天是儒略日,所以是 1-365。
  • 天列是儒略天,所以它运行 1-365。

标签: r lubridate


【解决方案1】:

如果你愿意,你可以使用基准日期而不是 lubridate

如果这是您的示例数据

dd<-data.frame(
    year = rep(2008,4), 
    day = 1:4
)

然后就可以运行了

years <- unique(dd$year)
yearstarts <- setNames(as.Date(paste0(years, "-01-01")), years)
newdates <- yearstarts[as.character(dd$year)] + dd$day - 1

哪个产生

cbind(dd, newdates)

#   year day   newdates
# 1 2008   1 2008-01-01
# 2 2008   2 2008-01-02
# 3 2008   3 2008-01-03
# 4 2008   4 2008-01-04

之所以有效,是因为基本 Date 类存储了自特定标记值以来的天数。因此,当您添加 1 时,您将在当前日期添加一天。在这里,我假设您可能有多年的时间来确保正确计算每年第一天的 Date 值。

【讨论】:

  • 这很好用,看起来也涵盖了闰年。我仍然对 Date 类的工作方式感到困惑,以至于我试图转移到lubridate。我害怕在没有lubridate 标签的情况下问这种问题,因为我知道答案可能就在那里,但是有很多我不太明白的东西要整理。
猜你喜欢
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
  • 2020-06-21
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多