将没有年份的日期转换为Julian日(自年初以来的天数)

时间:2016-11-17 13:42:05

标签: r date julian julian-date

我有一些日期需要转换为朱利安时代。这是我的数据

date <- c("21-Jul", "14-Jul", "08-Jul", "08-Jul","16-Jul")
class(date)

[1] "character"

我想将date转换为朱利安日。因此,对于上述日期,朱利安时代将是:

date
202,195,189,189,197 

我找到了一个将日期转换为儒略日的函数as.POSIXlt。对于例如

tmp <- as.POSIXlt("16Jun10", format = "%d%b%y")
tmp$yday
# [1] 166

但这需要按特定顺序约会,包括我没有的年份。有没有办法将我的日期转换成Julian?

此外,今年不是闰年。

朱利安时代意味着一年中的一天,因此1月1日是1月1日,1月2日是2,等等......

1 个答案:

答案 0 :(得分:3)

base R有一个函数julian,它可以与paste0as.Date一起生成您要查找的内容。

julian(as.Date(paste0("1970-", date), format="%Y-%d-%b"))
[1] 201 194 188 188 196
attr(,"origin")
[1] "1970-01-01"

请注意,这被计为1970年1月1日的天数(从0开始),因此您可以添加1以获得所需的结果。

julian(as.Date(paste0("1970-", date), format="%Y-%d-%b")) + 1
[1] 202 195 189 189 197

我手动检查1970年不是闰年:

seq(as.Date("1970-02-25"), as.Date("1970-03-02"), by="day")
[1] "1970-02-25" "1970-02-26" "1970-02-27" "1970-02-28" "1970-03-01" "1970-03-02"

为了将来参考,也可以使用as.Date的原点参数自己设置起点:

julian(as.Date(paste0("1980-", date), format="%Y-%d-%b"), origin=as.Date("1980-01-01"))
[1] 202 195 189 189 197
attr(,"origin")
[1] "1980-01-01"

应该清楚,原点可以设置为您希望的任何日期,以便可以用来计算任何日期之后(或之前)的天数。